将多个变量发送到laravel Api资源

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将多个变量发送到laravel Api资源相关的知识,希望对你有一定的参考价值。

我想要不同类型的集合。一个包含用户acros城市和另一个包含附近的用户。我希望这些来自单个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": "??",

            }
        ],

    }
}
答案

不,你不能在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)

以上是关于将多个变量发送到laravel Api资源的主要内容,如果未能解决你的问题,请参考以下文章

如何正确地将排序模型从我的控制器发送到 Laravel API 资源集合?

使用 laravel 一次调用多个 API 资源

WAMP Laravel - 从一个本地站点向另一个站点发送API请求混合了环境变量

Laravel:如何将图像或文件发送到 API

Laravel 5 变量构造查询字符串 Eloquent

如何通过活页夹将服务发送到 API 级别 14 的片段?