私は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();
:
あなたは
**と**の代わりに** OR **を使用してください。 –
@SougataBoseこんにちは!私はピボットモデルテーブルが複数の** role_id **を1つの** user_id **に対して持っているので、**と**は信じています。私が達成したいのは**ユーザー**です。 '** role_id ** –