2016-11-02 22 views
3

私はEloquentを使用してアプリケーションを構築しており、バマーに当たっています。多対多ピボット関係を使用しています。 REF:https://laravel.com/docs/5.0/eloquent#many-to-many複数のwhereHas( 'pivot_table_X')AND whereHas( 'pivot_table_X')

ユーザーモデル

  • ID
  • USER_NAME

役割モデル

  • ID
  • ROLE_NAME

ユーザーロールモデル(ピボットテーブル)

  • ID
  • のuser_idは、私はロールID 1を持つすべてのユーザーを取得したい場合は、私だけでしょう

をROLE_ID単純に:

$users = $app->users->with('roles')->has('roles') 
    ->whereHas('roles' function($query) { 
     $query->where('role_id', 1); 
    }) 
    ->get(); 
これにより

、私は正常にロールIDを持つすべてのユーザーを取得することができます= 1.

[特集]は今残念私はRole id = 1 AND Role id = 2(私の場合はどちらも管理者と司会)

を持つすべてのユーザーを取得する必要があるときにされ

私はこれを実行しようとした:

$users = $app->users->with('roles')->has('roles') 
    ->whereHas('roles' function($query) { 
     $query->where('role_id', 1); 
    }) 
    ->whereHas('roles' function($query) { 
     $query->where('role_id', 2); 
    }) 
    ->get(); 

をしかし、私のPHPの実行時間を使い果たし、これを処理する正しい方法はありますか?私は本当に効率的な方法を望んでいます。私たちはそうhasは一切使用していないだろうな役割をテーブルの上にwhereHas()を使用しているので、私は意図的に->has('roles')を削除した

$users = $app->users->with('roles') 
      ->whereHas('roles' function($query) { 
       $query->where('role_id', 1) 
        ->where('role_id', 2); 
      }) 
      ->get(); 

あなたは

+0

**と**の代わりに** OR **を使用してください。 –

+0

@SougataBoseこんにちは!私はピボットモデルテーブルが複数の** role_id **を1つの** user_id **に対して持っているので、**と**は信じています。私が達成したいのは**ユーザー**です。 '** role_id ** –

答えて

0

あなたのようにそれを試すことができますありがとうございます。それは同じように動作します。

+0

にありますが、私はSQLがそれを解決するとは思っていません。ピボットテーブルで" role_id "が1と2のどちらかである" single "行を探します。可能。それを試してみたところ、モデルからオブジェクトを返さない。 –

関連する問題