2016-11-02 2 views
3

Я создаю приложение с использованием Eloquent и нахожусь на обломке, я использую отношение Pivot для многих ко многим. ссылка: https://laravel.com/docs/5.0/eloquent#many-to-manyeloquent multiple whereHas ('pivot_table_X') AND whereHas ('pivot_table_X')

Модель пользователя

  • ID
  • user_name

Role Model

  • ID
  • role_name

User-Role Model (сводную таблицу)

  • ID
  • user_id
  • ROLE_ID

Если я хочу, чтобы все пользователи с ID роли 1, я буду просто просто:

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

С этим, я могу успешно получить все пользователи с ролью ид = 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, есть правильный способ справиться с этим? Я действительно надеюсь на эффективный способ сделать это.

Спасибо

+0

Не должно быть ** ИЛИ ** вместо ** И ** для бота идентификаторов роли? –

+0

@SougataBose Привет! Я полагаю, что ее ** И **, так как ось табличная модель имеет несколько ** role_id ** за один ** user_id **, что я хочу достичь, это получить все ** Пользователи ** где и идентификатор '2 и 3 'находятся в ** role_id ** –

ответ

0

Вы можете попробовать, как:

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

Я извлекал ->has('roles') намеренно, потому что мы используем whereHas() на столе ролей так has не будет использовать. Он будет работать одинаково.

+0

извините, но я не думаю, что SQL решит его, он будет искать« одиночную »строку в сводной таблице, где« role_id »- это как 1, так и 2, что не является возможное. Пробовал это, и cc, он не вернет какой-либо объект из модели. –

Смежные вопросы