我希望得到所有行,这与Laravel上的belongsToMany
关系相反。
例如,有events
表和visits
表。如果用户访问了某个事件,则在视频event_visit
表上访问的标记为1.
我希望得到所有这些未访问过的事件。
例如,用户模型:
public function userVisitedEvents()
{
return $this->belongsToMany(Visits::class, 'event_visit')
->where('visited', '=', '1');
}//end userVisitedEvents()
选择所有访问过的事件。
我想要实现的目标:我需要相反,获取所有事件,这两项事件都是:
问题出现了,因为使用belongsToMany
创建了INNER JOIN
关系。如果用LEFT JOIN
创建它 - 没问题。
PS - ->where('visited', '<>', '1');
不会起作用,因为它只能找到(1)个案例,而不是所有事件。
也许有机会说出要使用哪个联接? 或者唯一的选择是手动使用查询构建器吗?
答案 0 :(得分:1)
您正在寻找“关系缺席”
$events = Event::doesntHave('userVisitedEvents')->get();
您可能需要根据自己的情况进行调整。如果您无法使用它,请检查
Event::whereDoesntHave(...); //takes a closure.
来源:https://laravel.com/docs/5.4/eloquent-relationships#querying-relationship-absence