изменение имен ключей при использовании ресурсов Laravel для возврата данных API - PullRequest
0 голосов
/ 04 ноября 2018

Итак, я сейчас создаю API и вижу, что laravel добавил ресурс API, который, как я полагаю, заменяет нечто вроде фрактала?

Однако возникает проблема, когда при возврате коллекции с использованием ресурса XyzCollection у меня нет возможности изменить имена моей БД? Таким образом, я получаю то же соглашение об именах, что и в моей БД.

Множество очевидных причин, почему я не хочу, чтобы это было так (я могу в них разобраться, если потребуется) ОДНАКО - есть ли способ изменить эти ключевые имена?

например, в одной из моих таблиц у меня есть идентификатор, 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!

Заранее спасибо

Steve

1 Ответ

0 голосов
/ 05 ноября 2018

Сначала необходимо определить структуру для единственного объекта 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#concept-overview)

Если ваша ResourceCollection не делает ничего лишнего, вам это может не всегда понадобиться. Каждый JsonResource может преобразоваться в коллекцию ресурсов с помощью метода collection(), например, UserResource::collection($users)

...