我正在尝试获取集合的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"
}
我无法弄清楚这里发生了什么以及我做错了什么。
答案 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());
}