2016-10-26 7 views
0

多対多の関係を持つ表があります。Laravel 5.2権限を持つすべてのユーザーを取得する方法多対多

多くのアクセス権に多くのユーザー

私はすでに両方のモデルの多くの関係に多くを定義し、また、ピボットテーブルを作成します。

は、私がこれまで行って

User::all()->permissions->contains('name', 'access.backend.admin')->get(); 

で持っているものの許可名

が含まれている。しかし、それは私に

Undefined property: Illuminate\Database\Eloquent\Collection::$permissions on line 1 

を与えるすべてのユーザーを取得する私は何をしたいです私のコードの何が問題?

+0

を行うことができます::すべての() - >パーミッション() - >含まれています( '名前'、 'access.backend.admin') - > GET (); – umefarooq

+0

@umefarooq User :: all()はモデルオブジェクトではないコレクションを返しますので、 ' - > permissions()'関数はコレクションでは機能しません。 –

答えて

1

User::All()はモデルオブジェクトではないコレクションを返します。モデルオブジェクトを取得し、->permissions()を使用するには、コレクションを繰り返し処理します。 exapmleについては

$users = User::all(); 
foreach ($users as $user) { 
    $user->permissions->contains('name', 'access.backend.admin'); // returns boolean 
} 

それともとしてDBから単一のモデルを取得することができます。

$user = User::first(); 
$user->permissions->contains('name', 'access.backend.admin'); // returns boolean 

アップデート1

希望の許可使用にfilter()メソッドが含まれているユーザーを取得するにはとして:

$filtered_users = $users->filter(function ($user) { 
    if ($user->permissions->contains('name', 'access.backend.admin')) { 
     return $user; 
    } 
}); 

アップデート2

としてあなたはまた、目的の結果を返すクエリを記述することができます。私は、質問とタグの同様のケースを持って

$filtered_users = User::whereHas('permissions', function($q) { 
    $q->where('name', 'access.backend.admin'); 
})->get() 
+0

権限を持つユーザーをビューに渡す必要がある場合はどうなりますか?希望の権限を含むユーザーを含む新しい変数を定義する方法は? –

+0

私は答えを更新しました。 –

0

、彼らは多くの関係に多くを持っています。私は特定のタグですべての問題を取得する必要がある場合 は、それでは私はこの

$tag = Tag::where('name','laravel')->get()->first(); 

を行う私が最初に名前laravelとTagモデルを取得しました。 と入力し、タグlaravelを持つすべての質問を取得しました。

$questions = $tag->questions; 

同様にあなたは、このユーザーを試してみてください。この

$permission = Permission::where('name','access.backend.admin')->get()->first(); 
$users = $permission->users; 
+0

このアプローチは、2つのクエリを実行するので最適化されませんが、[whereHas()](https://laravel.com/docs/5.3/eloquent-relationships#querying-relations)を使用して、関数。 –

関連する問題