У меня есть функция, которая возвращает уведомления базы данных пользователя (модель пользователя подлежащий регистрации):
return $user->notifications()->get();
Возвращенный результат выглядит так:
[
{
"id": "5d6548d3-1f9b-4da5-b332-afbf428df775",
"type": "Meysam\\Notification\\Classes\\CommentCreated",
"notifiable_id": 1,
"notifiable_type": "RainLab\\User\\Models\\User",
"data": {
"userId": 2,
"commentId": 18
},
"read_at": null,
"created_at": "2018-03-05 09:58:34",
"updated_at": "2018-03-05 09:58:34"},
{
"id": "2e22e24e-a972-4a30-afeb-0049a40966a7",
"type": "Meysam\\Notification\\Classes\\CommentCreated",
"notifiable_id": 1,
"notifiable_type": "RainLab\\User\\Models\\User",
"data": {
"userId": 3,
"commentId": 17
},
"read_at": null,
"created_at": "2018-03-05 09:38:38",
"updated_at": "2018-03-05 09:38:38"}
]
Какой лучший способ изменить эту коллекцию перед ее возвратом? Например, я хочу удалить "id"
поле из объектов, изменить значение "type"
поле для "CommentCreated"
и добавьте новые поля, такие как "url", "username", "email", etc
к каждому предмету. Это хорошая идея, чтобы добавить hidden
, visible
а также append
атрибуты в DatabaseNotification
модель класса (если да, то как)? Являются Ресурсы API полезно здесь?
Для Laravel 5.5+
использование Ресурсы API.
Для Laravel < 5,5
Как предлагает @linktoahref, хорошая идея — использовать фракталы.
По определению REF: http://fractal.thephpleague.com/
Fractal предоставляет слой представления и преобразования для сложных
вывод данных, подобный тому, который есть в RESTful API, и работает очень хорошо
с JSON. Думайте об этом как о слое представления для вашего JSON / YAML / и т.д.
Вы можете использовать фракталы для преобразования данных в соответствующий формат. При работе с laravel рекомендуется создавать фракталы для каждой модели и использовать их по мере необходимости. Он может принять модель и выполнить преобразование для каждого поля и вернуться в надлежащий формат данных.
spatie/laravel-fractal
хороший пакет для начала работы с фракталами.
Если вы хотите просто изменить возвращаемое значение коллекции, то это можно сделать следующим образом:
$user->notifications()->get()->map(function($item) {
unset($item['id']); //remove id
$item['type'] = "CommentCreated"; //change the value of "type" field
$item['url'] = "url content"; //add new data
$item['username'] = "username content"; //add new data
$item['email'] = "email content"; //add new data
return $item;
});