我正在处理这个查询:(我希望我能够使用雄辩的语言传递同样的查询,并返回一个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];
}此查询已被解析并返回给我,结果是:--被分配给工作订单的操作符的名称--以及该操作符已完成状态中的工作订单数。为此,将users表和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 --在我需要的订单中:
"orders": [
{
"id": 4,
"name": "Luis",
"orders_by_user": 2,
"rol": 2
},如前所述,我希望我能够使用雄辩的语言传递同样的查询,并返回一个JSON作为响应。
我如何自定义这个JSON响应呢?它应该是这样的:单独的名称在一个数组中,orders_by_user在另一个数组中
示例--我想要实现的
"users": [
{
"name": "Luis"
}
]
"orders": [
{
"orders_by_user": 2
}
],我需要你的帮助,
发布于 2020-03-31 20:58:37
您可以像这样返回json响应
return response()->json(['name' => 'Abigail', 'state' => 'CA'])在这里阅读文档
https://laravel.com/docs/7.x/responses#json-responses
Note向@Rodrigo解释关系
在用户模型中,您的关系如下
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();如果每次调用relation,它将对每个调用执行查询。
优化关系调用,它只在一个查询中加载所有关系。
$user = User::with('orders')->get();
$order = $user->orders->first();发布于 2020-03-31 21:55:11
@umefarooq是对的,我总是遵循他的步骤,有时如果我不希望它返回特定模型的所有值,我会通过Laravel资源返回结果。这使您可以灵活地确定您希望从雄辩的查询中返回哪些字段。
在您的控制器中,而不是像
return response()->json($order);我就这样用它
return OrderResource::collection($orders); 只要您知道如何将所有必需的参数传递到集合中,就可以将此查询自定义为您想要的任何样式。因此,如果您只想获取有关用户和订单的基本信息:
class OrderResource extends JsonResource
return [
'user'=>[
'id' => $this->id,
'name' => $this->name,
],
'orders'=>[
'order_id' => $this->order->order_id,
'order_rol' => $this->rol
]
];https://stackoverflow.com/questions/60959576
复制相似问题