2017-02-22 68 views
0

我想获得所有的行,这是在Laravel belongsToMany关系的对面。所有,但属于ToMany关系

例如,有events表和visits表。如果用户访问过一个事件,则访问数据库event_visit表中标记为1.

我想获取所有这些事件,即不是访问过。

例如,用户模型:

public function userVisitedEvents() 
{ 
    return $this->belongsToMany(Visits::class, 'event_visit') 
     ->where('visited', '=', '1'); 
}//end userVisitedEvents() 

这将选择所有参观活动。

我想达到的目标:我需要得到相反,让所有的事件,那要么是:

  1. 标记为访问0
  2. 这次访问不是存储在所有(没有关系)

问题在那里,因为belongsToMany关系是使用INNER JOIN创建的。如果它将与LEFT JOIN创建 - 没问题。

PS - ->where('visited', '<>', '1');将不起作用,因为它只会找到(1)个案,而不是所有事件。

也许有机会分辨使用哪个连接? 或者唯一的选择是手动使用查询生成器?

+0

这不是用户的关注,以获取所有非参观活动。你需要使用查询范围从访问模型 –

+0

提供一个解决方案,可能不会很漂亮将做这个选择,并保存身份证,然后做另一个做相反的事情(从访问获取事件) –

回答