Или где оговорка - Laravel красноречивый

У меня есть этот запрос:

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?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
129
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

для этого предлагаем вам разделить запрос, как показано ниже, и не помещать условие 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);

Проблема в том, что у меня другие наборы где. У меня есть $where ['id' =>, ''... ]AND (если ключевое слово существует) WHERE keyword НРАВИТСЯ этот столбец или keyword нравится другой столбец. Но я вижу, что не могу использовать ->where($where)->where(// запрос ключевого слова)

gdfgdfg 29.05.2019 12:36

Если я удалю первый запрос Property::with, запрос по ключевому слову работает нормально. С этим нет. Конечно, первый запрос без ключевого слова работает.

gdfgdfg 29.05.2019 12:42

Хорошо, я сделал это с тремя частями. Сначала проверьте if (count($where)), затем примените его, 2. проверьте ключевое слово и последнее выполнение, и все работает нормально. Спасибо :).

gdfgdfg 29.05.2019 12:54

Вы также можете пойти с

$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 нравится другой столбец.

gdfgdfg 29.05.2019 12:35

Другие вопросы по теме