- 首先,从请求对象中获取用户所属店铺的 id 和时间信息 created_at。
- 使用 with() 方法构建查询语句,关联 fee、addr 和 items 属性。
- 使用 where() 方法过滤结果,条件为 u_id 等于用户所属的 id。
- 如果请求参数中存在 order_id,则添加 where 子句进行筛选,条件为 order_id 等于请求参数中的 order_id。
- 如果请求参数中存在 pay_status,则添加 whereHas 子句进行筛选,条件为 fee 属性中的 pay_status 等于请求参数中的 pay_status。
- 如果请求参数中存在 send_name,则添加 whereHas 子句进行筛选,条件为 addr 属性中的 send_name 包含请求参数中的 send_name。
- 定义了时间区域,条件为 created_at 晚于等于请求参数中的 created_at,早于等于请求参数中的 created_at。
- 使用 orderBy() 方法对结果进行排序,按照 id 倒序排列。
- 使用 paginate() 方法分页显示结果,每页显示请求参数中的 pageSize 条结果。
- 使用 response()->json() 方法将结果转换为 JSON 格式并返回,包括状态码、状态信息和查询结果。
public function getOrderTable($request) : object {
// 获取用户所属的 id
$id = Auth::user()->id;
// 从请求中获取时间信息
$created_at = $request->created_at;
// 构建查询语句
$query = ShuttleNo::with('fee', 'addr', 'items');
// 过滤结果
$query->where('u_id', $id);
// 添加 where 子句进行筛选
if ($request->order_id) {
$query->where('order_id', $request->order_id);
}
if ($request->pay_status) {
$query->whereHas('fee', function($q) use ($request) {
$q->where('pay_status', $request->pay_status);
});
}
if ($request->send_name) {
$query->whereHas('addr', function($q) use ($request) {
$q->where('send_name', "like", "%{$request->send_name}%");
});
}
// 定义了时间区域
$query->whereDate('created_at', '<=', $created_at[1]);
$query->whereDate('created_at', '>=', $created_at[0]);
// 对结果进行排序
$query->orderBy('id', 'desc');
// 分页显示结果
$result = $query->paginate($request->pageSize);
// 返回 JSON 格式的响应
return response()->json([
'code' => 200,
'msg' => '请求成功',
'data' => $result
]);
}
文章首发在公众号:IT全栈视野