Коллекция ресурсов laravel имеет пустой вывод - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь получить вывод json коллекции, но все, что я получаю, это данные [].

У меня есть 2 таблицы.

TABLE: Player ||id |имя

и

ТАБЛИЦА: FlightTime ||id |автомобиль |общее время |player_id (внешний ключ)

Я пытаюсь получить все записи о времени полета для конкретного игрока в виде коллекции.

Мой ресурс FlightTime:

class FlightTime extends JsonResource
{
    public function toArray($request)
    {
        return [
            'vehicle' => $this->vehicle,
            'total-time' => $this->totaltime,
        ];
    }
}

И мой FlightTimeCollection:

class FlightTimeCollection extends ResourceCollection
{
    public function toArray($request)
    {
        return [
           'data' => $this->collection,
           'test' => 'did this work',
       ];
    }
}

Мой маршрут API установлен как

Route::get('/v1/player/{name}/flights', 'PlayerController@showFlightbyName');

И у меня есть это в моем контроллере:

public function showFlightbyName($name)
    {
      $pid = Player::select('id')->where('name', $name)->first();

      return new FlightTimeCollection(FlightTime::where('player_id', $pid)->get());
    }

Теперь, когда я посещаю localhost/ api / v1 / player / Angel / flight, ошибки не выдается.Но все, что я получаю, это вот что.

{
    "data": [],
    "test": "did this work"
}

Я просто не могу понять, что здесь происходит и что я сделал не так.

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Я получил это работает.$ pid является объектом, и мне нужно было получить значение из $ pid-> id

public function showFlightbyName($name)
    {
      $pid = Player::select('id')->where('name', $name)->first();

      return new FlightTimeCollection(FlightTime::where('player_id', $pid->id)->get());
    }
0 голосов
/ 11 июня 2018

Вы должны относиться к методу toArray() в вашем FliightTimeCollection так же, как к FlightTimeResource.Коллекция будет автоматически упакована в data => [stuff]'.

Итак, вот так:

class FlightTimeCollection extends ResourceCollection
{
    public function toArray($request)
    {
        return [
            'vehicle' => $this->vehicle,
            'another_field' => $this->field2,
            // ...
        ];
    }
}

В результате будет

{
    "data": [
        {"vehicle": "some value", "another_field": "some value"},
        // ...
    ],
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...