php - 如何以雄辩的方式从查询中返回 JSON 响应?
问题描述
我正在处理这个查询:(我希望我可以使用 eloquent 传递同样的查询并返回一个 JSON 作为响应。)
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];
}
此查询已解析并返回给我作为结果:分配了工作订单的操作员的姓名以及该操作员拥有的处于已完成状态的工作订单的数量。 为此,将用户表和订单表关联起来。
{
"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 inside orders 我得到了我需要的东西:
"orders": [
{
"id": 4,
"name": "Luis",
"orders_by_user": 2,
"rol": 2
},
正如我之前提到的,我希望我可以使用 eloquent 传递同样的查询并返回一个 JSON 作为响应。
如何自定义此 JSON 响应? 它会是这样的:一个数组中的单独名称和另一个数组中的 orders_by_user
我想实现的例子
"users": [
{
"name": "Luis"
}
]
"orders": [
{
"orders_by_user": 2
}
]
我需要你的帮助
解决方案
你可以像这样返回 json 响应
return response()->json(['name' => 'Abigail', 'state' => 'CA'])
在此处阅读文档
https://laravel.com/docs/7.x/responses#json-responses
注意 解释与@Rodrigo Ruiz 的关系
在用户模型中有你这样的关系
class User extends Model
{
public function Orders()
{
return $this->hasMany(App\Order::class);
}
}
订单模式
class Order extends Model
{
public function user()
{
return $this->belongsTo(App\User::class);
}
}
$user = User::first();
获取用户的所有订单
$orders = $user->orders()->get();
获得第一笔订单
$order = $user->orders()->first();
如果您每次调用关系,它将在每次调用时执行查询。
优化关系调用它将仅在 1 个查询中加载所有关系。
$user = User::with('orders')->get();
$order = $user->orders->first();
推荐阅读
- python - 在 Python 中重新排序表正在写入最后两行
- github - 配置 Codacy 以查看受监控分支的所有分支?
- google-apps-script - How do I set "aggregate data series" to average instead of sum in Google Apps Script?
- mysql - 字段中的不同 where 值
- css - IE 元素的高度不能跨越其绝对定位的 flex 容器最小高度
- html - 在树的下方获取网格列
- angular - 如何在 Angular 5 和打字稿中使部分文本区域不可编辑?
- javascript - NodeJS:myFunction() 不是函数
- c++ - 无法在控制面板中创建轨迹栏。示例代码不起作用
- excel - Search for info and add from another sheet