1. 首先,从请求对象中获取用户所属店铺的 id 和时间信息 created_at。
  2. 使用 with() 方法构建查询语句,关联 fee、addr 和 items 属性。
  3. 使用 where() 方法过滤结果,条件为 u_id 等于用户所属的 id。
  4. 如果请求参数中存在 order_id,则添加 where 子句进行筛选,条件为 order_id 等于请求参数中的 order_id。
  5. 如果请求参数中存在 pay_status,则添加 whereHas 子句进行筛选,条件为 fee 属性中的 pay_status 等于请求参数中的 pay_status。
  6. 如果请求参数中存在 send_name,则添加 whereHas 子句进行筛选,条件为 addr 属性中的 send_name 包含请求参数中的 send_name。
  7. 定义了时间区域,条件为 created_at 晚于等于请求参数中的 created_at,早于等于请求参数中的 created_at。
  8. 使用 orderBy() 方法对结果进行排序,按照 id 倒序排列。
  9. 使用 paginate() 方法分页显示结果,每页显示请求参数中的 pageSize 条结果。
  10. 使用 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全栈视野

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐