Вывести nested отношение через один метод в Laravel Eloquent Model?
Дорогие участники тостера, очень нужна помощь. Благодарен буду любому ответу.
В общем-то все очень просто: существует модель юзера. К каждому юзеру привязана карточка. У этой карточки привязана подписка. К подписке привязаны акции, к акциям - скидки.
юзер->карты->подписка->акции->скидки
Так вот в чем суть: как мне в модели юзера сделать метод, который вернет все скидки для данного юзера Eloquent модельками, не городя цепочки foreach-ей (метод auth()->user()->discounts)? Или каким образом можно это дело оптимизировать.
П.С. Скидка не может быть привязана к конкретному пользователю в силу специфики бизнес-логики.
Eager Loading знаю, но это дикая цепочка проходов по массивам в коде. А метод требуется использовать регулярно.
1. Самостоятельно написать запрос, затем получить коллекцию моделей с использованием метода Illuminate\Database\Eloquent\Builder::hydrate() + репозиторий для удобства.
2. Реализовать собственную связь, благо в laravel это делается легко: достаточно наследовать класс Illuminate\Database\Eloquent\Relations\Relation и реализовать все методы. Для примера можно использовать стандартные связи.
P.S. Стандартными средствами нет возможности решить эту задачу.
Да, благодарю за ответ. Пожалуй, вариант с реализацией собственной связи является неплохим решением. По-сути, необходимо перереализовать метод hasManyThrough для бесконечного количества аргументов.
Не знаю, как в деталях работает eloquent, но как вариант, вы можете сделать метод, в котором получать списком скидки, и распихивать из по пользователям. Т.е. User::fetchDisounts(array $users)