laravel资源集合具有空白输出

时间:2018-06-10 19:33:25

标签: laravel api collections resources

我正在尝试获取集合的json输出,但我得到的只是数据[]。

我有2张桌子。

  

表:玩家||   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 / flights时,不会抛出任何错误。但我得到的只是这个。

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

我无法弄清楚这里发生了什么以及我做错了什么。

2 个答案:

答案 0 :(得分:0)

您应该像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"},
        // ...
    ],
}

答案 1 :(得分:0)

我得到了它的工作。 $ pid是一个obj,我需要从$ pid-> id

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

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