Я создаю функцию поиска для моего приложения.Для упрощения: есть две таблицы: магазины и подписки
Каждый магазин может иметь несколько записей подписки, поле подписки имеет expires_at
.Теперь я предполагаю, что магазин имеет активную подписку, если подписка существует, и хотя бы одна из дат expires_at подписки магазина больше, чем now ().
Это одно из условий для всего запроса.Вот код:
$shops = Shop::when($subscription, function($query, $subscription) {
$query->doesntHave('subscriptions')->orWhereHas('subscriptions', function($q) use ($subscription, $query) {
$query->where('expires_at', '<', now());
});
});
Он не работает должным образом, потому что, если у магазина есть три связанных подписки, и по крайней мере одна из них истекла - это предполагает, что у магазина нет активной подписки (даже если у него есть).
Мне нужно было бы реализовать некоторую вложенную функцию внутри или где, я думаю, чтобы она сортировалась по expires_at desc, а затем ограничивалась одним и только потом передавала бы выражение expires_at, однако я понятия не имею, как.
И мне скорее нужно придерживаться Eloquent Query Builder, а не фасада БД или неформатированного sql.
По сути, это та же проблема, что здесь не был дан ответ: https://laracasts.com/discuss/channels/eloquent/latest-record-from-relationship-in-wherehas?page=1