#php #laravel #eloquent
#php #laravel #красноречивый
Вопрос:
У меня есть какая-то красноречивая модель со скрытым payload
полем
В некоторых местах я хочу включить это поле в представление JSON. Я делаю это с помощью метода makeVisible:
$models->makeVisible('payload');
Но я не думаю, что это хороший код ООП (SRP, DIP, правила DRY, что угодно). Я хотел бы скрыть это за некоторой абстракцией, используя некоторый повторно используемый метод, например, withPayload(), внутри моего класса модели. Есть ли какой-либо способ добиться этого в Laravel? Может быть, как-то с помощью областей запросов и метода pluck?
Ответ №1:
Я думаю, что способ, которым вы сейчас пользуетесь makeVisible
, в порядке. Вы ничего не добьетесь, прячась ->makeVisible('payload');
за другим методом. Это был бы нестандартный способ выполнения задач, и следующему разработчику пришлось бы пойти и изучить и запомнить, что делает новый метод.
$hidden
и makeVisible
дает понять следующему разработчику, что данные, возможно, являются конфиденциальными данными и не должны быть видны всем пользователям. Если вы считаете, что могли бы сделать данные видимыми чаще, чем скрывать их, подумайте о том, чтобы либо добавить поле в $visible
массив, либо удалить оба массива $visible
and $hidden
(если вы не используете его для каких-либо других полей), и используйте makeHidden
метод, чтобы скрыть данные, когда вам нужно.
Ответ №2:
Я предлагаю вам погрузиться во фракталы (spatie / laravel-fractal — хорошая оболочка для этого) и поместить туда логику для представления вашей модели в виде JSON.
Там вы можете определить базовую структуру вашего вывода JSON (т.Е. Поля, Которые у вас всегда есть) и использовать include везде, где вам нужны ваши конкретные поля.