Laravel Ресурс - как вернуть данные в виде массива с ключами? - PullRequest
0 голосов
/ 07 августа 2020

До сих пор я возвращал себе список серверов по: return Server::all()->keyBy('id'). Теперь я хотел бы также использовать ресурс, чтобы контролировать, какие столбцы будут использоваться совместно. return new ServerCollection(Server::all()->keyBy('id'));. Однако это не работает. Как это сделать правильно?

Edit Теперь я возвращаю все серверы в массиве, который имеет ключ из идентификатора сервера.

Контроллер:

public function index()
{
    return Server::all()->keyBy('id');
}

Теперь я хотел бы начать использовать ресурсы и вернуть только некоторые данные. Итак, я преобразовал свой скрипт в это:

Контроллер:

public function index()
{
    return ServerResource::collection(Server::all()->keyBy('id'));
}

Ресурс:

class Server extends JsonResource
{
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'name' => $this->name
        ];
    }
}

Данные, которые я получаю:

{"data":[{"id":1,"name":"server 1"},{"id":2,"name":"server 2"},{"id":3,"name":"server 3"}]}

Я бы хотел, чтобы данные возвращались в виде массива с ключами.

{"data":["1": {"id":1,"name":"server 1"}, "2": {"id":2,"name":"server 2"}, "3": {"id":3,"name":"server 3"}]}

Ответы [ 2 ]

0 голосов
/ 07 августа 2020

Ну, я не знаю, почему происходит эта проводная вещь, но я думаю, что вы можете достичь с помощью collect () данных и keyBy

collect(Server::all())->keyBy('id')
0 голосов
/ 07 августа 2020

Я предполагаю, что вы говорите о Коллекциях ресурсов https://laravel.com/docs/7.x/eloquent-resources

Согласно документации, когда вы хотите создать коллекцию, как вы описываете здесь, вы должны использовать коллекцию как так : Server::collection(Server::all()->keyBy('id'));

https://laravel.com/docs/7.x/eloquent-resources#resource -коллекции

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