在多对多关系中包含另一组结果


Including another set of results into many-to-many relationship

假设我有三个表:

  1. Article: id,…
  2. 广告:id, display_on_every_subsite,…
  3. 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());