假设我有三个表:
- Article: id,…
- 广告:id, display_on_every_subsite,…
- Article_Advert: advert_id, article_id
我有一个简单的Eloquent的关系:文章和广告之间的belongsToMany - Article_Advert是数据透视表。
问题是,我需要获取所有广告为指定的文章(s)和所有广告与display_on_every_subsite = 1.
我正在尝试使用联合来实现这一点,这是我现在所做的:
$this->belongsToMany('Advert', 'Article_Advert', 'article_id', 'advert_id')->union(Advert::allSubpages()->selectRaw('`advert`.*, `advert`.`id` as `pivot_advert_id`, null as `pivot_article_id`')->getQuery());
问题是,当pivot_article_id为null时,Eloquent不会将获取的行附加到任何相关模型。
就像那样,只是改变以下内容:
// I assume you have this inside Article Model
$articleId = $this->id;
$this->belongsToMany('Advert', 'Article_Advert', 'article_id', 'advert_id')
->union(Advert::allSubpages()
->selectRaw("`advert`.*, `advert`.`id` as `pivot_advert_id`, '$articleId' as `pivot_article_id`")
->where('display_on_every_subsite','=','1')
->getQuery());