Laravel Eloquent中的动态关系查询

时间:2018-01-09 08:41:11

标签: laravel eloquent

我有一个包含动态过滤器的搜索表单,我想根据不同过滤器的存在动态生成关系查询。

使用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 \控制器{闭合}()

1 个答案:

答案 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();