whereHas查询关系是否存在时如何统计相关模型?
How to count related models when querying relationship existence via whereHas?
我有 2 个模型:客户端模型 hasMany deposits_quantity(ClientDeposit)
class Client extends Model
{
public function deposits_quantity()
{
return $this->hasMany(ClientDeposit::class, 'client_id');
}
}
如何在没有制动查询的情况下获得特定数量的相关(deposits_quantity)模型结果'chaining'?
假设我有这样的查询链:
$query = Client::query()
例如,我有一个按创建日期过滤关系的过滤器:
$query->whereHas('deposits_quantity', function($query) use($request) {
$query->whereDate('created_at', '>=', $request->input('deposit_at_from'))
->whereDate('created_at', '<=', $request->input('deposit_at_to')); })
接下来,当我尝试像这样过滤关系数量以仅获取具有 2 deposits_quantity 的客户时:
$query->has('deposits_quantity' ,'=', 2')
它 returns 有 2 个存款的客户但是它中断了查询链并且 returns 从一开始就没有之前的所有过滤器的结果,它 returns 清理 "has" 并且忽略其他过滤器,我知道是因为我调用了'has',但是如何正确地通过特定数量的关系和过滤后得到结果?
您可以使用 whereHas
的第二个和第三个参数来指定运算符和计数以进一步自定义查询:
$query->whereHas('deposits_quantity', function($query) use ($request) {
$query->whereDate('created_at', '>=', $request->input('deposit_at_from'))
->whereDate('created_at', '<=', $request->input('deposit_at_to'));
}, '=', 2) // <= Attention to these 2 arguments passed to `whereHas`
我有 2 个模型:客户端模型 hasMany deposits_quantity(ClientDeposit)
class Client extends Model
{
public function deposits_quantity()
{
return $this->hasMany(ClientDeposit::class, 'client_id');
}
}
如何在没有制动查询的情况下获得特定数量的相关(deposits_quantity)模型结果'chaining'? 假设我有这样的查询链:
$query = Client::query()
例如,我有一个按创建日期过滤关系的过滤器:
$query->whereHas('deposits_quantity', function($query) use($request) {
$query->whereDate('created_at', '>=', $request->input('deposit_at_from'))
->whereDate('created_at', '<=', $request->input('deposit_at_to')); })
接下来,当我尝试像这样过滤关系数量以仅获取具有 2 deposits_quantity 的客户时:
$query->has('deposits_quantity' ,'=', 2')
它 returns 有 2 个存款的客户但是它中断了查询链并且 returns 从一开始就没有之前的所有过滤器的结果,它 returns 清理 "has" 并且忽略其他过滤器,我知道是因为我调用了'has',但是如何正确地通过特定数量的关系和过滤后得到结果?
您可以使用 whereHas
的第二个和第三个参数来指定运算符和计数以进一步自定义查询:
$query->whereHas('deposits_quantity', function($query) use ($request) {
$query->whereDate('created_at', '>=', $request->input('deposit_at_from'))
->whereDate('created_at', '<=', $request->input('deposit_at_to'));
}, '=', 2) // <= Attention to these 2 arguments passed to `whereHas`