我想要不同类型的收藏集。一个包含用户的城市在城市附近,另一个包含用户附近的城市。我想从单个api命中这些。可能吗 ?如果是的话,请提出建议。
我做了
return ServiceProviderCollection::collection($near_by);
输出:
"data": [
{
"username": "??",
"email": "??",
"rating": 0,
"role_id": 2,
"wallet": "0"
}
],
我想要
return ServiceProviderCollection::collection($near_by,$across_city);
预期输出:
{
"across_city": {
"data": [
{
"username": "??",
"email": "??",
}
],
},
"near_by": {
"data": [
{
"username": "??",
"email": "??",
}
],
}
}
答案 0 :(得分:2)
否,您不能在Resource
中传递2个对象。您可以这样
return [
'across_city' => ServiceProviderCollection::collection($across_city),
'near_by' => ServiceProviderCollection::collection($near_by)
];
编辑:评论后
如果要显示分页信息,则必须创建单独的控制器操作,然后返回ServiceProviderCollection::collection
,然后将获得带有分页元信息的结果。
在控制器ex中创建这些操作。 (UserController
)
public function acrossCity(){
$acrossCity = User::where('city','test')->paginate(10); //example
return ServiceProviderCollection::collection($acrossCity);
}
public function nearBy(){
$nearBy = User::where('near','1')->paginate(10); //example
return ServiceProviderCollection::collection($nearBy);
}
为此创建路线
Route::get('user/acrossCity','UserController@acrossCity');
Route::get('user/nearBy','UserController@nearBy');
检查文档https://laravel.com/docs/5.6/eloquent-resources#pagination
注意::使用资源类时,请命名为不带有Collection
的资源。对于您的情况,应将资源命名为ServiceProviderResource
,然后在调用其集合时将其命名为ServiceProviderResource::collection($object)
,在返回单个对象时则将其命名为new ServiceProviderResource($object)
。
答案 1 :(得分:2)
我当前正在使用Laravel 7,并且在我的控制器中,我将一组收集对象传递给资源类
$data = ['quotation' => Quotation::first()];
return new QuotationResource($data);
在我的资源类中,我可以使用
public function toArray($request)
{
return [
'quotation' => $this->resource['quotation']
];
}