Laravel — Как в «whereHas» проверить все записи в отношениях?

#laravel #eloquent

#laravel #красноречивый

Вопрос:

У меня есть 2 модели: клиент, подписка.

Отношение в модели Customer:

     public function subscriptions()
{
    return $this->belongsToMany('AppSubscription')
        ->withPivot('subscription_id', 'delivery_type')
        ->orderBy('end_date', 'DESC');
}
  

Запутался в моей проблеме: при выборе клиентов мне нужно выбирать только тех, у кого истекли все подписки (‘end_date’, ‘<=’, Carbon::today()) и клиентов без подписок.

Мой запрос:

     public function customers_without_subscriptions()
{
    $customers = Customer::
        doesntHave('subscriptions')
        ->orWhereHas('subscriptions', function (Builder $query) {
            $query->where('end_date', '<=', Carbon::today());
            })
        ->orderBy('name', 'ASC')
        ->paginate(12);
  

Теперь выбираются все клиенты, у которых истекла хотя бы 1 подписка — это неверно!

Спасибо за внимание!

Комментарии:

1. Вы добавили end_date в dates массив Customer модели?

2. @БАБАК АШРАФИ, «end_date» является атрибутом модели подписки.