为什么多对多没有工作关系?

时间:2016-07-21 20:42:46

标签: laravel laravel-5.2

我的数据库内容为3个表:

users           roles        role_user
id | name       id | name    user_id | role_id

角色模型:

class Role extends Model
{
   // TODO
}

用户模型:

 public function roles(){
        return $this->belongsToMany('Role');
    }

控制器:

 public function getUsers(){
        $users = User::all();

        foreach($users->roles as $item){
            dd($item);
        }
    }

当我调用方法getUsers()时,我收到错误:

  

未定义属性:Illuminate \ Database \ Eloquent \ Collection :: $ roles

所以,我需要获得用户的所有角色,它可能是每个用户的一些值。 我做错了什么?

1 个答案:

答案 0 :(得分:2)

用户是一个Eloquent集合,这就是角色方法不存在的原因。

你想要做这样的事情:

public function getUsers() {
    // eager load roles to prevent n+1 query problem
    $users = User::with('roles')->get();

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