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`