или где пункт - Laravel красноречивый - PullRequest
0 голосов
/ 29 мая 2019

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

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, 'OR' и LIKE вышеуказанным способом, включая другие значения из массива $where?

Ответы [ 2 ]

1 голос
/ 29 мая 2019

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

$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);
1 голос
/ 29 мая 2019

, чтобы добиться того, чтобы вы предложили разделить ваш запрос, как показано ниже, и не помещайте условие 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...