Laravel多对多关系回归意外结果

时间:2016-01-31 21:26:36

标签: php laravel-5 many-to-many

我的多对多关系返回数据存在问题。我有3个表来定义此关系usersinstitutes和数据透视表users_institutes。我users_institutes中的数据位于图片中。

enter image description here

我的关系由以下代码定义。

public function super_user_institutes()
{
    return $this->belongsToMany('App\Institute', 'users_institutes')
        ->wherePivot('role', 'inst_superuser')
        ->orWherePivot('role', 'inst_admin')
        ->orWherePivot('role', 'inst_staff')
        ->withPivot('role');
}

现在,对于我正在尝试获取关系的用户具有id 2.所以,现在如果我使用

$user->super_user_institutes;

我得到以下行作为回应:1,2,3,9,10,11,12(7行)。

我期望以下行:1,2,3。

我期待错误的结果吗?或者我的关系定义错了?

2 个答案:

答案 0 :(得分:0)

尝试这么多代码

public function super_user_institutes()
   {
      return $this->belongsToMany('App\Institute', 'users_institutes');
   }

答案 1 :(得分:0)

当我写下对我以前所做的事情的否定时,它运作正常。奇怪,但我不明白为什么它现在有用,为什么它以前不起作用。

而不是::

public function super_user_institutes()
{
    return $this->belongsToMany('App\Institute', 'users_institutes')
        ->wherePivot('role', 'inst_superuser')
        ->orWherePivot('role', 'inst_admin')
        ->orWherePivot('role', 'inst_staff')
        ->withPivot('role');
}

我写了::

public function super_user_institutes()
{
    return $this->belongsToMany('App\Institute', 'users_institutes')
        ->wherePivot('role', '<>', 'inst_student')
        ->withPivot('role');
}

这回归了我所期待的。