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

时间:2015-05-15 13:46:14

标签: php eloquent

我们说我有三张桌子:

  1. 文章:id,...
  2. 广告:id,display_on_every_subsite,...
  3. Article_Advert:advert_id,article_id
  4. 我有一个简单的雄辩的关系:在物品和广告之间属于所有人 - Article_Advert是数据透视表。

    问题是我需要获取指定文章和所有广告的所有广告,其中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不会将获取的行附加到任何相关模型。

1 个答案:

答案 0 :(得分:1)

它几乎就是这样,只需更改以下内容:

// 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());