【问题标题】:laravel resource collection has blank outputlaravel 资源集合有空白输出
【发布时间】:2018-06-10 19:33:25
【问题描述】:

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

我有 2 张桌子。

表:播放器 || 编号 | 名字

表:飞行时间 ||编号 |车辆 |总时间 | 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"
}

我只是想不通这里发生了什么以及我做错了什么。

【问题讨论】:

    标签: laravel api collections resources


    【解决方案1】:

    您应该像在 FlightTimeResource 中一样对待 FliightTimeCollection 中的 toArray() 方法。该集合将自动包装在 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"},
            // ...
        ],
    }
    

    【讨论】:

    • 我按照你的建议试过了。它抛出一个错误。 "Property [vehicle] does not exist on this collection instance."
    【解决方案2】:

    我让它工作了。 $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());
        }
    

    【讨论】:

      猜你喜欢
      • 2021-11-03
      • 2022-07-26
      • 2020-06-13
      • 1970-01-01
      • 2020-01-05
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 2018-08-22
      相关资源
      最近更新 更多