#php #laravel-5 #eloquent #eloquent-relationship
#php #laravel-5 #красноречивый #eloquent-relationship
Вопрос:
Я пытаюсь написать красноречивый запрос, который будет работать следующим образом:
Tables:
Order
Support Ticket (one to many with the order)
Запрос:
Фильтруйте обращения в службу поддержки и показывайте заказ только в том случае, если обращению в службу поддержки менее 45 дней.
Я чувствую, что это было бы адаптацией метода whereHas() в Laravel, но я не уверен, как реализовать фильтр или поиск по дате для таких отношений.
Спасибо!
Ответ №1:
$orders = Order::whereDoesntHave('support_ticket')
->orWhereHas('support_ticket', function($query) {
$query->where('created_at', '>=', now()->subDays(45));
})->get();
Где «support_ticket» — это имя отношения в вашей модели заказа.
Таким образом, вы можете получить заказы, у которых нет обращения в службу поддержки или которые имеют по крайней мере один и менее 45 дней.
Поскольку вы находитесь в Laravel 5, возможно, now() не определен, тогда вы можете использовать:
IlluminateSupportCarbon::now()
Комментарии:
1. Большое спасибо. Я вижу, что это вынуждает к тому, что в заказе должен быть хотя бы один билет. Есть ли способ использовать это в условном? Например, «если у него есть билет, он должен быть в течение последних 45 дней»
2. думаю, я понял это, я могу добавить «whereDoesntHave», а затем выполнить «orWhereHas»
3. Да, именно так! Дайте мне знать, если вы поняли это!
4. @ackerchez отредактировал ответ, скажите мне, сработало ли это! Может быть, вы можете отредактировать вопрос, чтобы все было очищено!