或where子句-Laravel雄辩

时间:2019-05-28 22:07:10

标签: laravel laravel-5 eloquent

我有这个查询:

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 个答案:

答案 0 :(得分: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 :(得分: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);