2014-12-31 4 views
1

Я пытаюсь найти всех пользователей, зарегистрированных для определенного курса, используя следующий запрос, используя laravel.Левое соединение не работает должным образом

$users = DB::table('users') 
      ->leftJoin('registrationrequests', 'users.id', '=', 'registrationrequests.user_id') 
      ->where('firstname', 'LIKE', "%$search%") 
      ->orWhere('lastname', 'LIKE', "%$search%") 
      ->orWhere('username', 'LIKE', "%$search%") 
      ->where('registrationrequests.course_id', $course_id) 
      ->where('registrationrequests.registered', 1) 
      ->get(); 

В таблице registrationrequests, у меня есть столбцы для course_id, user_id и registered (двоичное значение). course_id и user_id - это внешние ключи для соответствующих таблиц.

Я получаю массив вывода. Но это не проверка состояния where('registrationrequests.course_id', $course_id)

В чем может быть причина?

+0

вы смотрели на http://stackoverflow.com/a/18660266/689579? – Sean

+0

Да, я проверил. это то же самое, что и этот запрос. – user1012181

+0

Итак, вы пробовали '-> где ('registrationrequests.course_id', $ course_id) -> где ('registrationrequests.registered', 1) -> где (function ($ users) {$ users-> где ('firstname' , «LIKE», «% $ search%») -> orWhere («lastname», «LIKE», «% $ search%») -> orWhere («имя пользователя», «LIKE», «% $ search%») }) -> get(); '? – Sean

ответ

1

http://laravel.com/docs/4.2/queries#advanced-wheres Использование и https://stackoverflow.com/a/18660266/689579 Ваш запрос будет выглядеть примерно так -

$users = DB::table('users') 
     ->leftJoin('registrationrequests', 'users.id', '=', 'registrationrequests.user_id') 
     ->where('registrationrequests.course_id', $course_id) 
     ->where('registrationrequests.registered', 1) 
     ->where(function($users) use($search){ 
       $users->where('firstname', 'LIKE', "%$search%") 
         ->orWhere('lastname', 'LIKE', "%$search%") 
         ->orWhere('username', 'LIKE', "%$search%") 
     }) 
     ->get(); 
Смежные вопросы