2016-07-14 10 views
0

基本的には、特定の役割を持つすべてのユーザーをダンプします。私が行うとき:Laravel 5.2ロール(Entrust)を持つすべてのユーザーを取得

$users = User::with('roles')->get(); 

私はそうのようなユーザーに追加されたすべてのユーザーとロールを取得:

{ 
id: 1, 
first_name: "P", 
last_name: "Tag", 
email: "[email protected]", 
phone: "5555555555", 
avatar: "", 
last_login: "2016-07-13 23:49:23", 
created_at: "2016-07-13 23:25:05", 
updated_at: "2016-07-13 23:49:23", 
roles: [ 
    { 
    id: 1, 
    name: "owner", 
    display_name: "Admin", 
    description: "Admin user that has full access", 
    created_at: "2016-06-07 00:00:00", 
    updated_at: "2016-06-07 00:00:00", 
    pivot: { 
     user_id: 1, 
     role_id: 1 
    } 
    } 
] 
}, 

グレートは、今私は、特定の値の役割名を持つユーザーを取得したいです。

$users = User::with('roles')->where('roles->name', '=', 'owner')->get(); 

もちろんのことは動作しません:私は私のクエリは、このそれを記述する方法がわからないようになります想像してみてください。

答えて

0

あなたはこのようなイーガーローディングクエリの追加のクエリ制約を指定することができます。

$users = User::with(['roles' => function ($query) { 
    $query->where('name', '=', 'owner'); 
}])->get(); 

更新:

を使用すると、ユーザーテーブルに追加のクエリ制約を指定したい場合は、このようにそれらをチェーンすることができます
$users = User::with(['roles' => function ($query) { 
    $query->where('name', '=', 'owner'); 
}])->where('role_id', '<>', null)->->get(); 

注:説明するために、role_idまたはデータベースの内容を確認しないでください。だから、これは私はそれを動作させるために何をしたかである

$users = App\User::with(['roles' => function ($query) { 
    $query->where('name', 'owner'); 
}])->get(); 
+0

Hmmmこれはすべてのユーザーを返しますが、所有者がJSONに追加されたユーザー、まだリストではなく役割がないユーザーのみが返されるようになりました。 – Packy

+0

あなたは熱心に読み込まれたクエリではなく、ユーザーテーブルをクエリします。 OK更新された回答を参照 – ClearBoth

+0

ねえ、haventあなたの答えを試みたが、私はそれを考え出した。あなたが望むなら、あなたは私の答えをチェックアウトすることができます。乾杯。 – Packy

0

は次のようにクエリを使用してください。問題を抱えている誰かには、Laravel Eloquent Relationshipのドキュメントを見てください。それが私の問題を解決した場所です。

$users = User::whereHas('roles', function ($query) { 
      $query->where('name', '=', 'owner'); 
})->get(); 
+0

@clearbothと同じ – Packy

関連する問題