laravel订单搜索,with多表多条件查询

  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全栈视野

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值