2014-11-08 6 views
0

Я пытаюсь расширить мой поиск по сайту. Вы можете искать название или описание предложения прямо сейчас. У каждого предложения есть предмет. У субъекта есть имя. Я тоже хочу найти название темы, но я не могу работать. Это как далеко я попробовал:Запрос отношения в Laravel

$adverts = Advert::orderBy('created_at', 'desc')->active(); 

    if($search) 
    $adverts = $adverts->whereHas('subjects', function($q) use ($search) 
    { 
     $q->where('name', 'like', '%$search%'); 
    }) 
    ->where(function($query) use ($search) { 
     $query->where("title", "like", "%$search%"); 
     $query->orWhere("description", "like", "%$search%"); 
    }) 
    ->get(); 

Там нет ничего сломано, но запрос не находит предложения с названием темы, как поиск.

Есть ли у вас какие-либо предложения?

Спасибо

+0

Я уверен, что ваш 'where' после' whereHas' должен быть 'orWhere' – lukasgeiter

+0

В' '' имя like''' запроса использовать одиночные кавычки, а вы поставите имя переменной в нем. Я предлагаю сделать из него двойные кавычки или объединить переменную. – ArjanSchouten

+0

Спасибо @lukasgeiter, вы его исправили! – Strernd

ответ

0

Оператор булево по умолчанию для функции where в Laravel является AND. Это означает, что ваш код на самом деле говорят:

Если имя содержит $ поиск и название или описание содержит $ поиск

Очевидно, что вы хотите в там OR.

Так что просто измените where после whereAs на orWhere.

$adverts = $adverts->whereHas('subjects', function($q) use ($search) 
{ 
    $q->where('name', 'like', '%$search%'); 
}) 
->orWhere(function($query) use ($search) { 
    $query->where("title", "like", "%$search%"); 
    $query->orWhere("description", "like", "%$search%"); 
}) 
->get(); 
Смежные вопросы