[英]Why eloquent model relationships do not use parenthesis and how do they work?
[英]How Do Inverse Relationships Work in Laravel Eloquent?
我有两个模型/表格: publisher
和campaign.
出版者
id | name
运动
id | name | PubID
我创建了一个关系来获取发布者的广告系列。
$this->hasMany(Campaign::class, 'PubID'); /* In Publisher Model */
我相信以上内容将帮助我检索相关的广告系列,但是我对逆向关系感到困惑。
如您所见, publisher
表中没有键campaign_id
。 下面的关系足以满足反要求吗?
return $this->belongsTo('App\Publisher'); /* In Campaign Model */
有人可以指导我吗? 我会很感激。
是的,这就是所谓的one to many relationship
,这意味着一个发布者拥有许多广告系列。 相反的是,活动属于发布者。 因此,为了获得发布商的所有广告系列,您可以使用:
Publisher::find($id)->campaigns;
为了获得活动的发布者,您可以使用:
Campaign::find($id)->publisher;
您不需要在发布者表中使用campaign_id
,而在广告系列表中, PubID
就是已知的。
您有两个模型,并添加了两个外部ID。 这是许多工作。 您只需要添加带有campain_id和publiser_id的数据透视表
这是多对多关系的一个很好的例子:一个发布者可以属于多个活动对象,而一个活动者可以具有多个发布者。
出版商
ID | 名称
活动
ID | 名称
campaign_publisher
campain_id | PUBLISHER_ID
列表中的最终表– campaign_publisher称为“数据透视表”,如主题标题中所述。
因此,选项1:
class Campaign extends Model
{
/**
* The products that belong to the shop.
*/
public function publishers()
{
return $this->belongsToMany('App\Publisher');
}
}
因此,选项2:
class Publisher extends Model
{
/**
* The shops that belong to the product.
*/
public function campaigns()
{
return $this->belongsToMany('App\Campaign');
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.