2016-09-20 30 views
0

我有以下模式设置:Laravel belongsToMany没有返回结果

用户:

  • ID

部门:

  • ID

department_user:

  • ID
  • 部门标识
  • USER_ID

我也有以下关系成立:

用户模型

public function departments() 
{ 
    return $this->belongsToMany('App\Resources\Eloquent\Models\Department', 'department_users'); 
} 

系车型

public function users() 
{ 
    return $this->belongsToMany(User::class, 'department_users'); 
} 

出于某种原因,当我试图通过用户模型$user->departments访问,这是行不通的 - 但$department->users一样。

输出雄辩查询如下:

select `departments`.*, `department_users`.`user_id` as `pivot_user_id`, `department_users`.`department_id` as `pivot_department_id` from `departments` inner join `department_users` on `departments`.`id` = `department_users`.`department_id` where `department_users`.`user_id` is null 

我似乎无法找出它为什么是想看看是否department_users.user_id为空,当它应该寻找用户的ID。

任何想法?

+0

你是如何想出了'$ user'变量?用户还没有保存,我相信这个ID将是空的。 – user3158900

+0

为什么你定义返回$ this-> belongsToMany(User :: class,'department_users'); - 删除第二个arg'department_users',并在用户模型中删除第二个参数。它的可选表名,我在这个定义中看到拼写错误“department_users”,而你的模式在顶部“department_user” - 缺少最后一个“s” – Adiasz

+0

'$ user'变量已经分配给从数据库中提取的模型。 I.E:'$ user = User :: find(1)' –

回答

0

由于某种原因,如果我使关系如下 - 它的作品。

return $this->belongsToMany(Department::class, 'department_users')->orWhere('department_users.user_id', $this->id); 

如果有谁知道这是为什么,请让我知道

0

你为什么不设置你的模型像有人建议的文件here在:

所以,你的模型将是这个样子:

用户模型

public function departments() 
{ 
    return $this->belongsToMany('path\to\your\model\Department'); 
} 

部门型号

public function users() 
{ 
    return $this->belongsToMany(path\to\your\model\User); 
} 

Eloquent会按字母顺序连接两个相关的模型名称。因此,在定义关系时并不需要额外的参数,并且默认情况下Laravel也会使模型键出现在数据透视对象上。然后你可以做这样的事情:

$department = path\to\your\model\Department::find(1); 

foreach ($department->users as $user) { 
    echo $user; 
}