数据透视表上的一对多关系

问题描述 投票:0回答:1

我在数据库中已有数据,我想创建一对多关系。使用数据透视表时,如何限制或模拟一对多关系?

我想从数据透视表中获取数据,所以我认为可以这样做。

class Asset extends Model {
    public function publisher() {
        return $this->belongsTo(Publisher::class, 'asset_publisher');
    }
}

-

class Publisher extends Model {
    public function assets() {
        return $this->hasMany(Asset::class, 'asset_publisher');
    }
}
laravel eloquent laravel-nova
1个回答
0
投票

模拟一对多的一种可能方法是为数据透视表“ AssetPublisher”创建模型,因此您现在将拥有

    class Publisher extends Model {

        public function assets() {
            return $this->belongsToMany(Asset::class, 'asset_publisher');
        }
    }


   class AssetPublisher extends Model {

        public function publisher() {
            return $this->belongsTo(Publisher::class);
        }
    }

   class Asset extends Model {

        public function assetPublisher() {
            return $this->hasOne(AssetPublisher::class)->with('publisher');
        }

        public function getPublisherAttribute(){
            return $this->assetPublisher->publisher;
        }
    }

您现在可以调用$asset->publisher给您Publisher实例,并单击$publisher->assets()->get()来获取所有资产实例

© www.soinside.com 2019 - 2024. All rights reserved.