Laravel属于ToMany没有返回结果

时间:2016-09-20 14:18:27

标签: php mysql laravel eloquent models

我设置了以下架构:

用户:

  • 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

我似乎无法弄清楚为什么它应该在查找用户的ID时查看department_users.user_id是否为空。

有什么想法吗?

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

出于某种原因,如果我建立以下关系 - 它可以工作。

routerLink

如果有人知道原因,请告诉我