Задать вопрос
be_a_dancer
@be_a_dancer
Backend/Fullstack Developer

Вывести nested отношение через один метод в Laravel Eloquent Model?

Дорогие участники тостера, очень нужна помощь. Благодарен буду любому ответу.
В общем-то все очень просто: существует модель юзера. К каждому юзеру привязана карточка. У этой карточки привязана подписка. К подписке привязаны акции, к акциям - скидки.
юзер->карты->подписка->акции->скидки

Так вот в чем суть: как мне в модели юзера сделать метод, который вернет все скидки для данного юзера Eloquent модельками, не городя цепочки foreach-ей (метод auth()->user()->discounts)? Или каким образом можно это дело оптимизировать.

П.С. Скидка не может быть привязана к конкретному пользователю в силу специфики бизнес-логики.

Eager Loading знаю, но это дикая цепочка проходов по массивам в коде. А метод требуется использовать регулярно.
  • Вопрос задан
  • 264 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
abler98
@abler98
Software Engineer
Имеется минимум два варианта решения:

1. Самостоятельно написать запрос, затем получить коллекцию моделей с использованием метода Illuminate\Database\Eloquent\Builder::hydrate() + репозиторий для удобства.
2. Реализовать собственную связь, благо в laravel это делается легко: достаточно наследовать класс Illuminate\Database\Eloquent\Relations\Relation и реализовать все методы. Для примера можно использовать стандартные связи.

P.S. Стандартными средствами нет возможности решить эту задачу.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
proudmore
@proudmore
Не знаю, как в деталях работает eloquent, но как вариант, вы можете сделать метод, в котором получать списком скидки, и распихивать из по пользователям. Т.е. User::fetchDisounts(array $users)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы