Настраиваемый атрибут красноречивой нетерпеливой загрузки

Контекст: я использую Lumen для создания JSON API и хочу сделать запросы как можно меньше.

Я не могу понять, как условно добавить красноречивый атрибут модели при загрузке.

Мой пример довольно сложно объяснить, поэтому я постараюсь свести его к более простому объяснению.

Возьмем для примера Категории, Сообщения и Комментарии.

В отношении отношений:

  • Категорииимеет многоСообщения.
  • Сообщения действительно имеет Комментарии, но по разным причинам это непростая взаимосвязь и требует некоторой настраиваемой фильтрации и объединения.

Вопрос 1: Я «прикрепил» комментарии к сообщениям через атрибут - это правильно?

Я использовал метод getCommentsAttribute и добавил comments в массив appends модели.

Однако при перечислении всех Сообщения в категории Комментарии приходит на помощь, что делает JSON довольно большим файлом (много сообщений с множеством категорий).

Я понимаю, что это происходит потому, что они автоматически добавляются и удаляются из массива appends.

Однако потом я изо всех сил пытаюсь их вернуть. Если мне нужен другой список категорий с включенными комментариями, я не могу ссылаться на них

Categories::find(2)->with([
    'posts'
]);

Я пробовал добавлять запрос после сообщений и использовать другие операторы with, но не могу получить доступ к комментариям.

Вопрос 2: Как можно условно добавить атрибуты в оператор нетерпеливой загрузки, чтобы загрузить их при определенных запросах?

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

D. Petrov 25.10.2018 11:45

Спасибо, я проверю и посмотрю, смогу ли я вынести из этого отношения. Это некоторые записи, основанные на записях, которые выбираются с помощью необработанного оператора SQL. Не знаю достаточно красноречиво, чтобы связать это: /

mikestreety 25.10.2018 13:04

Взгляните на это. Если у вас ничего не получится, я собираюсь поболтать, чтобы посмотреть, что мы можем с этим поделать.

D. Petrov 25.10.2018 13:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
969
0

Другие вопросы по теме