我在数据库中已有数据,我想创建一对多关系。使用数据透视表时,如何限制或模拟一对多关系?
我想从数据透视表中获取数据,所以我认为可以这样做。
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');
}
}
模拟一对多的一种可能方法是为数据透视表“ 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()
来获取所有资产实例