首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从有说服力的查询中返回JSON响应?

如何从有说服力的查询中返回JSON响应?
EN

Stack Overflow用户
提问于 2020-03-31 20:43:40
回答 2查看 2.3K关注 0票数 2

我正在处理这个查询:(我希望我能够使用雄辩的语言传递同样的查询,并返回一个JSON作为响应)。

代码语言:javascript
运行
复制
public function getChart(Request $request)
    {      
        $_orders = DB::table('users')
            ->join('orders','orders.user_id','=','users.id')
            ->join('model_has_roles', 'users.id', '=', 'model_has_roles.model_id')                        
            ->select('users.id','users.name', DB::raw('COUNT(orders.id) as orders_by_user'), 'model_has_roles.role_id as rol')                   
            ->where('model_has_roles.role_id', '2');
        $_orders->groupBy('orders.user_id', 'users.id',  'users.name',  'model_has_roles.role_id');
        $orders=$_orders->get();

        return ['orders' => $orders];

    }

此查询已被解析并返回给我,结果是:--被分配给工作订单的操作符的名称--以及该操作符已完成状态中的工作订单数。为此,将users表和orders表关联起来。

代码语言:javascript
运行
复制
{
"orders": [
{
"id": 4,
"name": "Luis",
"orders_by_user": 2,
"rol": 2
},
{
"id": 6,
"name": "Jose",
"orders_by_user": 1,
"rol": 2
},
{
"id": 7,
"name": "Miguel",
"orders_by_user": 1,
"rol": 2
}
]
}

如果您查看我的查询响应,我的数组称为orders --在我需要的订单中:

代码语言:javascript
运行
复制
"orders": [
{
"id": 4,
"name": "Luis",
"orders_by_user": 2,
"rol": 2
},

如前所述,我希望我能够使用雄辩的语言传递同样的查询,并返回一个JSON作为响应。

我如何自定义这个JSON响应呢?它应该是这样的:单独的名称在一个数组中,orders_by_user在另一个数组中

示例--我想要实现的

代码语言:javascript
运行
复制
"users": [
{

"name": "Luis"
}
]
"orders": [
{

"orders_by_user": 2

}
]

,我需要你的帮助,

EN

回答 2

Stack Overflow用户

发布于 2020-03-31 20:58:37

您可以像这样返回json响应

代码语言:javascript
运行
复制
return response()->json(['name' => 'Abigail', 'state' => 'CA'])

在这里阅读文档

https://laravel.com/docs/7.x/responses#json-responses

Note向@Rodrigo解释关系

在用户模型中,您的关系如下

代码语言:javascript
运行
复制
class User extends Model
{
    public function Orders()
    {
        return $this->hasMany(App\Order::class);
    }
}

序模型

代码语言:javascript
运行
复制
class Order extends Model
{
    public function user()
    {
        return $this->belongsTo(App\User::class);
    }
}

$user = User::first();

获取用户的所有订单

代码语言:javascript
运行
复制
$orders = $user->orders()->get();

第一次订货

代码语言:javascript
运行
复制
$order = $user->orders()->first();

如果每次调用relation,它将对每个调用执行查询。

优化关系调用,它只在一个查询中加载所有关系。

代码语言:javascript
运行
复制
$user = User::with('orders')->get();

$order = $user->orders->first();
票数 2
EN

Stack Overflow用户

发布于 2020-03-31 21:55:11

  • 列表项目

@umefarooq是对的,我总是遵循他的步骤,有时如果我不希望它返回特定模型的所有值,我会通过Laravel资源返回结果。这使您可以灵活地确定您希望从雄辩的查询中返回哪些字段。

在您的控制器中,而不是像

代码语言:javascript
运行
复制
return response()->json($order);

我就这样用它

代码语言:javascript
运行
复制
 return OrderResource::collection($orders); 

只要您知道如何将所有必需的参数传递到集合中,就可以将此查询自定义为您想要的任何样式。因此,如果您只想获取有关用户和订单的基本信息:

代码语言:javascript
运行
复制
class OrderResource extends JsonResource
return [
           'user'=>[
                'id' => $this->id,
                'name' => $this->name,
                  ],
            'orders'=>[
                'order_id' => $this->order->order_id,
                'order_rol' =>  $this->rol
            ]
        ];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60959576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档