У меня есть этот запрос:
if ($keyword){
array_push($where, ['name_en', 'LIKE', '%'.$keyword.'%']);
}
Проблема в том, что у меня есть столбец и name_fr
, и мне нужно использовать пункт OR
- array_push($where, ['name_fr', 'LIKE', '%'.$keyword.'%'])
.
Я не могу использовать ->orWhere
, потому что у меня много динамических полей поиска - они могут быть или нет.
Например:
if ($fromPrice){
array_push($where, ['price', '>=', $fromPrice]);
}
if ($toPrice){
array_push($where, ['price', '<=', $toPrice]);
}
И запрос:
$cars= Property::with(array(
'photos'=>function($query){
$query->select(['car_id', 'name']);
}
))->where($where)->paginate(10);
Мне нужно выбрать WHERE name_en LIKE %val% OR name_fr LIKE %val%
с другими запросами.
Есть ли способ как-то использовать where
, «ИЛИ» и LIKE
вышеописанным способом, включая другие значения из массива $where
?
для этого предлагаем вам разделить запрос, как показано ниже, и не помещать условие keyword
в массив $where
:
$query = Property::with(array(
'photos'=>function($query){
$query->select(['car_id', 'name']);
}
))->where($where);
if ($keyword){
$query = $query->where(function ($query) use ($keyword) {
$query->where('name_fr', 'like', $keyword)
->orWhere('name_en', 'like', $keyword);
});
}
$cars = $query->paginate(10);
Если я удалю первый запрос Property::with
, запрос по ключевому слову работает нормально. С этим нет. Конечно, первый запрос без ключевого слова работает.
Хорошо, я сделал это с тремя частями. Сначала проверьте if (count($where))
, затем примените его, 2. проверьте ключевое слово и последнее выполнение, и все работает нормально. Спасибо :).
Вы также можете пойти с
$propertyQuery = Property::query();
if ($keyword){
$propertyQuery->where(function($query) use ($keyword){
$query->where('name_fr', 'LIKE', '%'.$keyword.'%')->orWhere('name_en', 'LIKE', '%'.$keyword.'%');
});
}
$cars = $propertyQuery->paginate(10);
Проблема в том, что у меня другие наборы где. У меня есть $where ['id' =>, ''... ]
AND
(если ключевое слово существует) WHERE keyword
НРАВИТСЯ этот столбец или keyword
нравится другой столбец.
Проблема в том, что у меня другие наборы где. У меня есть $where
['id' =>, ''... ]
AND
(если ключевое слово существует) WHEREkeyword
НРАВИТСЯ этот столбец илиkeyword
нравится другой столбец. Но я вижу, что не могу использовать ->where($where)->where(// запрос ключевого слова)