我有这个查询:
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
数组中的另一个值?
答案 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);