我有一个包含动态过滤器的搜索表单,我想根据不同过滤器的存在动态生成关系查询。
使用whereHas like
$properties = PropertyList::where('varification_status', '1')
->whereHas('common_property_details', function ($query) {
$query->where('no_bathroom', '=', '1');
})->get();
如何在不使用一堆if else语句的情况下填充动态查询
Alexey Mezenin的回答是正确的,还有一个疑问。 现在我可以使用
$properties = PropertyList::where('varification_status', '1')
->when($request['bathRooms'] > 0, function ($q) {
$q->whereHas('common_property_details', function ($query) {
$query->where('no_bathroom', '1');
});
})->get();
但我不能在whereHas
中使用任何变量内部查询我试过这个
$properties = PropertyList::where('varification_status', '1')
->when($request['bathRooms'] > 0, function ($q) {
$q->whereHas('common_property_details', function ($query,$bathRoom) {
$query->where('no_bathroom', $bathRoom);
});
})->get();
但显示了打击错误
缺少参数2 应用\ HTTP \控制器\ PropertySearchController ::应用\ HTTP \控制器{闭合}()
答案 0 :(得分:2)
如果您不想使用大量if
语句,可以使用when()
方法:
$properties = PropertyList::where('varification_status', '1')
->when($something === $somethingElse, function($q) {
$q->whereHas(....);
})
->when($something > $someMaximum, function($q) {
$q->whereHas(....);
})
->get();