2016-07-25 24 views
0

私はLaravelアプリケーションを持っています。私は役割とアクセス許可のためにthisパッケージを使用しています。それは素晴らしい作品です。テーブル内のユーザーのLaravel印刷ロール

私は、すべてのユーザーの役割を持つテーブルを表示したいと考えています。現在、私はUsersControllerで次の定義を使って解決しています。

public function listUsers() 
    { 
     $users_admin = Role::where('name', 'admin')->first()->users()->get(); 
     $users_buyers = Role::where('name', 'buyer')->first()->users()->get(); 
     $users_sellers = Role::where('name', 'seller')->first()->users()->get(); 

     return view('admin.users.index', [ 
      'users_admin' => $users_admin, 
      'users_buyers' => $users_buyers, 
      'users_sellers' => $users_sellers 
      ]); 
    } 

ビューでは、3つのテーブル(管理ユーザー、バイヤー、売り手)を表示する3つのループがあります。

言うまでもなく、私はこのアプローチが本当に好きではなく、理想的には自分の役割を持つユーザーを表示する単一のテーブルを持つことになります。で

@foreach($users_sellers as $user) 
    <tr> 
    <td align="center" class="hidden-xs">{{ $user->id }}</td> 
    <td>{{ $user->name }}</td> 
    <td>{{ $user->email }}</td> 
    <td>{{ $user->displayRole($user->id) }}</td> 
    </tr> 
@endforeach 

:私の見解は次のことを述べて単一のforeachが含まれていながら、

$users = User::all(); 

だからアイデアは、私ががUserControllerで、次のコード(または類似)を書き込むことができるということです上記の擬似コードの上で、私はuser-idに基づいてロールを取得するヘルパーを定義しました。問題は、私はヘルパー関数に何を入れるのか分からないのですか?

注:ヘルパー以外の(より良い)メソッドがある場合、それは私にとってもうまくいくでしょう。

答えて

1

このパッケージでは、ユーザーのモデルにリレーションを追加するので、$user->rolesは、現在のユーザーに割り当てられたロールを持つコレクションにする必要があります。各ユーザーのクエリを作成しないようにするには、$users = User::with('roles')->get();のような役割を持つユーザーを呼び出す必要があります。あなたのコントローラ

+0

私はこれも実際に試しましたが、私はいつも "定義されていないメソッドを呼び出す\ Database \ Query \ Builder :: all()"を取得します – wiwa1978

+0

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

+0

これは動作します。ビューでは、ロールの名前を表示するために、$ user-> roles [0] - > nameを実行しています。これは機能します。しかし、複数の役割がある場合はどうなりますか?私はそれらを反復するか、そこにすべての役割を表示するためのより良い方法ですか? – wiwa1978

0

、あなたはビューでは、あなたのテーブルに

public function listUsers() 
    { 
     $users_admin = Role::where('name', 'admin')->first()->users()->get(); 
     $users_buyers = Role::where('name', 'buyer')->first()->users()->get(); 
     $users_sellers = Role::where('name', 'seller')->first()->users()->get(); 
     $role = Role::get(); 

     return view('admin.users.index', [ 
      'users_admin' => $users_admin, 
      'users_buyers' => $users_buyers, 
      'users_sellers' => $users_sellers 
      'role' => $role 
      ]); 
    } 

それを持っている場合は、ちょうどこの

@foreach($users_sellers as $user) 
    <tr> 
    <td align="center" class="hidden-xs">{{ $user->id }}</td> 
    <td>{{ $user->name }}</td> 
    <td>{{ $user->email }}</td> 
    <td>{{ $role['$user->id']['role_name']</td> 
    </tr> 
@endforeach 

ノートのような役割の名前を印刷し、役割を取得:

<td>{{ $role['$user->id']['role_name']</td>

この行は、コントローラからビューに$roleをどのように送信するかによって異なります。ロールのID配列の名前を返すのが目的です。

希望すると、これが役に立ちます。

+0

私はこれを試しましたが、私は本当に好きではない3つのコレクションusers_admin、users_buyers、およびusers_sellersをまだ使用しています。 – wiwa1978