Laravel雄心勃勃的嵌套渴望加载的属性可能存在或不存在

时间:2019-03-25 05:05:48

标签: laravel eloquent

我正在尝试让用户在特定日期之后过滤掉其“交易”。 但是,关系hasCustomers,客户或交易可能存在或可能不存在。

这是我到目前为止尝试过的。

    $user = User::with('hasCustomers.customers.transactions', function ($q) use ($filter){
        $q->whereDate('created_at', '>', $filter);
    })->find($user_id);

但是它会引发错误mb_strpos() expects parameter 1 to be string, object given。 预期的输出是在特定日期过滤器之后(如果存在“交易”)通过“交易”获得此“用户”属性。

有线索吗?

编辑: 这将正确返回,但由于未过滤“ with”,因此未过滤日期。

User::with('hasCustomers.customers.transactions')
->whereHas('hasCustomers.customers.transactions', function ($q) use ($filter){
    $q->whereDate('created_at', '>', $filter);
})->find($user_id);

编辑: 这是语法错误,我应该使用数组。效果很好。

$dateFilter = function ($q) use ($filter){
        $q->whereDate('created_at', '>', $filter);
    };
$user = User::with(['hasCustomers.customers.transactions' => $dateFilter]->find($user_id);

2 个答案:

答案 0 :(得分:0)

尝试一下:

    User::with('hasCustomers.customers.transactions')
                ->whereHas('hasCustomers', function ($q) use ($filter) {
                    $q->whereHas('customers', function ($q) use ($filter) {
                        $q->whereHas('transactions', function ($q) use ($filter) {
                            $q->whereDate('created_at', '>', $filter);

                        });
                    });
                })->find($user_id);

答案 1 :(得分:0)

这是语法错误,我应该使用数组。效果很好。

$dateFilter = function ($q) use ($filter){
        $q->whereDate('created_at', '>', $filter);
    };
$user = User::with(['hasCustomers.customers.transactions' => $dateFilter]->find($user_id);