2016-07-21 6 views
-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()を呼び出すと、私はエラーを取得する:

Undefined property: Illuminate\Database\Eloquent\Collection::$roles

だから、私はそれは、ユーザーごとにいくつかの値であるかもしれない、ユーザーのすべてのロールを取得する必要があります。 私は間違っていますか?

答えて

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; 
     } 
    } 
} 
+0

あなたは、なぜ私の解決策は機能していなかったしてください説明することができます:

あなたはこのような何かをしたいと思いますか?あなたは何を変えましたか? – Dev

+0

そして '$ user-> roles'をテンプレートの中に直接表示するにはどうしたらいいですか? – Dev

+0

Eloquent Collection($ users)には、Userモデルで宣言したメソッド(ロール)がありません。 –