Я не уверен, почему вы это делаете:
$words = str_replace(" ", "%", $q);
, потому что позже вы все равно добавляете "%" с переменной $words
. Так что сделайте это так:
$words = trim(Input::get("query"));
$cars = Product::whereHas('model', function ($query) use ($words) {
$query->where('name', 'like', "%$words%");
})->orWhereHas('manufacturer', function ($query) use ($words) {
$query->where('name', 'like', "%$words%");
})->get();
Это должно работать для поиска по одному слову. Теперь, если вы хотите сопоставить несколько слов, разделенных пробелами, вам нужно будет использовать explode()
, чтобы фактически получить каждое слово, и написать комбинацию OR AND WHERE
для соответствия результатам. ИЛИ вы можете использовать MYSQL FULL TEXT QUERY, но это выходит за рамки этого вопроса.
Пожалуйста, задайте для этого отдельный вопрос.
Надеюсь, это поможет