Изменение имен ключей при использовании ресурсов laravel для возврата данных API
Итак, я сейчас создаю API и вижу, что laravel добавил ресурс API, который, как я полагаю, заменяет нечто вроде фрактала?
Однако возникает проблема, когда при возврате коллекции с использованием ресурса XyzCollection у меня нет возможности изменять имена БД? Таким образом, я получаю то же соглашение об именах, что и в моей БД.
Множество очевидных причин, почему я не хочу, чтобы это было так (я могу в них разобраться, если потребуется) ОДНАКО - есть ли способ изменить эти ключевые имена?
например, в одной из моих таблиц у меня есть id, uuid, user_uuid. Теперь во фрактале я бы просто преобразовал эти поля так:
'id' => $xyz->uuid,
'user' => [
'data' => [
[
'user_id' => $xyz->user->uuid,
'username' => $xyz->user->username,
]
]
],
Как мне это сделать, когда все, что я могу сделать, это передать коллекцию в коллекцию XyzCollection?
'data' => $this->collection,
и прежде чем сказать, используйте XyzResource ... Когда я возвращаю all(); такие записи, как мне нужно делать много раз в API (или разбивать на страницы) и т. д. и т. д. Я могу сделать это только из XyzCollection!
заранее спасибо
Стив
1 ответ
Сначала вам нужно определить структуру для отдельного объекта JsonResource:
(php artisan make:resource Xyz
)
public function toArray($request)
{
return [
'user_id' => $this->uuid,
'username' => $this->username,
];
}
А затем скажите вашей XyzCollection использовать класс:
Настройка базового класса ресурса
Как правило,
$this->collection
свойство коллекции ресурсов автоматически заполняется результатом сопоставления каждого элемента коллекции с его единственным классом ресурсов. Предполагается, что класс единственного ресурса является именем класса коллекции без завершающегоCollection
строка.Например,
UserCollection
будет пытаться отобразить указанные пользовательские экземпляры вUser
ресурс. Чтобы настроить это поведение, вы можете переопределить$collects
свойство вашей коллекции ресурсов
(Из https://laravel.com/docs/5.7/eloquent-resources)
Если ваша ResourceCollection не делает ничего лишнего, вам может это не всегда понадобиться. Каждый JsonResource может превратиться в коллекцию ресурсов с collection()
метод, например UserResource::collection($users)