Контекст: я использую Lumen для создания JSON API и хочу сделать запросы как можно меньше.
Я не могу понять, как условно добавить красноречивый атрибут модели при загрузке.
Мой пример довольно сложно объяснить, поэтому я постараюсь свести его к более простому объяснению.
Возьмем для примера Категории, Сообщения и Комментарии.
В отношении отношений:
Вопрос 1: Я «прикрепил» комментарии к сообщениям через атрибут - это правильно?
Я использовал метод getCommentsAttribute и добавил comments в массив appends модели.
Однако при перечислении всех Сообщения в категории Комментарии приходит на помощь, что делает JSON довольно большим файлом (много сообщений с множеством категорий).
Я понимаю, что это происходит потому, что они автоматически добавляются и удаляются из массива appends.
Однако потом я изо всех сил пытаюсь их вернуть. Если мне нужен другой список категорий с включенными комментариями, я не могу ссылаться на них
Categories::find(2)->with([
'posts'
]);
Я пробовал добавлять запрос после сообщений и использовать другие операторы with, но не могу получить доступ к комментариям.
Вопрос 2: Как можно условно добавить атрибуты в оператор нетерпеливой загрузки, чтобы загрузить их при определенных запросах?
Спасибо, я проверю и посмотрю, смогу ли я вынести из этого отношения. Это некоторые записи, основанные на записях, которые выбираются с помощью необработанного оператора SQL. Не знаю достаточно красноречиво, чтобы связать это: /
Взгляните на это. Если у вас ничего не получится, я собираюсь поболтать, чтобы посмотреть, что мы можем с этим поделать.






Проблема с мутатором здесь заключается в том, что он добавляется к экземпляру модели
Postпосле того, как запрос был обработан, поэтому, если вы действительно уверены, что вам не удастся каким-то образом настроить отношение комментариев через метод отношения (который, кстати, позволяет вы можете делать довольно широкий круг вещей), вы в значительной степени застряли в этом недостатке гибкости мутатора. Возможно, вам все же стоит подумать о работе с вашим отношениемcommentsс помощью метода, потому что добавление его в качестве атрибута (как вы уже заметили) не совсем соответствует вашим требованиям к гибкости, и им довольно сложно управлять.