我正在尝试让用户在特定日期之后过滤掉其“交易”。 但是,关系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);
答案 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);