或 where 子句 - Laravel 雄辩

问题描述 投票:0回答:2

我有这样的疑问:

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
数组中的另一个值?

php laravel laravel-5 eloquent
2个回答
1
投票

为了实现这一目标,建议您按如下方式划分查询,并且不要将

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);

1
投票

你也可以一起去

$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);
© www.soinside.com 2019 - 2024. All rights reserved.