Коллекция Laravel # makeVisible () как метод модели - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть модель Eloquent со скрытым payload полем

В некоторых местах я хочу включить это поле в представление JSON. Я делаю это с помощью метода makeVisible:

$models->makeVisible('payload');

Но я не думаю, что это хороший код ООП (правила SRP, DIP, DRY, что угодно). Я хотел бы скрыть это за некоторой абстракцией, имея некоторый метод многократного использования, такой как withPayload () , внутри моего класса Model. Есть ли способ достичь этого в Laravel? Может быть, как-то с Query Scopes и методом извлечения?

Ответы [ 3 ]

2 голосов
/ 15 апреля 2019

Я думаю, что вы используете makeVisible в порядке. Вы ничего не получите, если будете прятать ->makeVisible('payload'); за другим методом. Это был бы нестандартный способ работы, и следующий разработчик должен был бы пойти и изучить и запомнить, что делает новый метод.

$hidden и makeVisible дают понять следующему разработчику, что данные, возможно, являются конфиденциальными данными и не должны быть видны всем пользователям. Если вы считаете, что можете сделать данные видимыми чаще, чем скрывать их, попробуйте добавить поле в массив $visible или удалить массивы $visible и $hidden (если вы не используете их для каких-либо другие поля) и используйте метод makeHidden, чтобы скрыть данные, когда это необходимо.

0 голосов
/ 15 апреля 2019

Я думаю, что метод, который вы ищете:

Model::setVisible('field')

From => this

0 голосов
/ 15 апреля 2019

Предлагаю вам погрузиться в фракталы ( spatie / laravel-fractal - хорошая оболочка для этого) и поместите туда логику для представления вашей модели как JSON.

Там вы можете определить базовую структуру вашего вывода JSON (то есть полей, которые у вас всегда есть) и использовать include везде, где вам нужны ваши конкретные поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...