Как рассчитать связанные модели при запросе существования отношений через whereHas? - PullRequest
0 голосов
/ 02 марта 2020

У меня есть 2 модели: модель клиента hasMany depos_quantity (ClientDeposit)

class Client extends Model
{
  public function deposits_quantity()
  {
    return $this->hasMany(ClientDeposit::class, 'client_id');
  }
}

как получить указанное c количество связанных результатов модели (deposit_quantity) без торможения запроса «сцепление»? Предположим, у меня есть цепочка запросов, например:

$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 deposit_quantity:

$query->has('deposits_quantity' ,'=', 2')

возвращает Клиентов с 2 Депозитами, но тормозит цепочку запросов и возвращает результаты с начала без всех фильтров до этого, возвращает clean «has» и игнорирует другие Фильтры, я знаю это, потому что я называю «имеет», но как сделать это правильно, чтобы получить результаты по определенному c количеству отношений и после фильтрации?

1 Ответ

1 голос
/ 02 марта 2020

Вы можете использовать 2-й и 3-й аргументы 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`
...