除了belongsToMany之外的所有关系

时间:2017-02-22 18:23:09

标签: laravel many-to-many relationship

我希望得到所有行,这与Laravel上的belongsToMany关系相反。

例如,有events表和visits表。如果用户访问了某个事件,则在视频event_visit表上访问的标记为1.

我希望得到所有这些访问过的事件。

例如,用户模型:

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

选择所有访问过的事件。

我想要实现的目标:我需要相反,获取所有事件,这两项事件都是:

  1. 标记为已访问0
  2. 这次访问根本没有存储(没有关系)
  3. 问题出现了,因为使用belongsToMany创建了INNER JOIN关系。如果用LEFT JOIN创建它 - 没问题。

    PS - ->where('visited', '<>', '1');不会起作用,因为它只能找到(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