weixin_49860915 2023-09-26 22:12 采纳率: 50%
浏览 7
已结题

laraverl关键字搜索区分如何区分不同条件

大家好,我想关键字同时模糊查询订单号和商品名称,看下面代码


<?php
// 引入订单模型
use App\Models\Product\Order as OrderModel;
// 引入订单表产品模型
use App\Models\Product\OrderProduct as OrderProductModel;
// 引入商品的数据模型
use App\Models\Product\Product as ProductModel;
public function index()
    {
          //用户id
         $busid = request('busid', 0, 'trim');
        //获取关键字
        $keywords = request('keywords', '', 'trim');

        $qb = OrderModel::query();

        //通过用户id查询订单数据
        $result = $qb->where('busid', $busid)->orderBy('id', 'DESC')->get();
      
      /*
        $where = [];
        $where['busid'] = $busid;
        if($keywords)
        {
            $where[] = ['code', 'like', "%$keywords%"];
        }

        $result = $qb->where($where)->orderBy('id', 'DESC')->get();
        我这里实现模糊查询订单号
      */
        

        $data = [];
        foreach($result as $item) {

          //这里实现模糊查询商品名称
            $orderproduct = OrderProductModel::with(['product'])
            ->whereHas('product', function ($query) use ($keywords){
                if ($keywords){
                    $query->where('name', 'like', '%' . $keywords . '%');
                }
            })->where('orderid', $item['id'])->first();

            if($orderproduct) {
                $item['orderproduct'] = $orderproduct;
                $data[] = $item;
            }

        }

        return success('', '', $data);

    }

已经能够分别实现模糊查询订单号和商品名称,但是本人经验不足,不知道怎么处理在查到订单号时如何去避免再去查商品名称和在查不到订单号时怎么去查询商品名称,注意,商品名称的模糊查询用到了链表

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-09-27 09:08
    关注

    该回复引自免费微信小程序-皆我百晓生:


    在你的代码中,你已经实现了在订单号code和商品名称name上进行模糊查询。如果你想避免在没有匹配到订单号时再去查询商品名称,以及在没有匹配到订单号和商品名称时返回结果,你可以使用条件判断来处理。

    在循环遍历订单数据时,你可以添加条件判断来决定是否查询商品名称。如果订单号匹配成功,则查询商品名称;如果订单号没有匹配成功,跳过查询商品名称的步骤。在没有订单号匹配成功时,你可以通过检查$data数组的长度来判断是否需要查询商品名称。

    下面是修改后的代码:

    public function index()
    {
        $busid = request('busid', 0, 'trim');
        $keywords = request('keywords', '', 'trim');
    
        $qb = OrderModel::query();
        $qb->where('busid', $busid);
    
        // 模糊查询订单号
        if ($keywords) {
            $qb->where('code', 'like', "%$keywords%");
        }
    
        $orders = $qb->orderBy('id', 'DESC')->get();
        $data = [];
    
        foreach ($orders as $order) {
            // 判断是否有订单号匹配成功
            if ($order->code) {
                $orderproduct = OrderProductModel::with(['product'])
                    ->whereHas('product', function ($query) use ($keywords) {
                        $query->where('name', 'like', '%' . $keywords . '%');
                    })
                    ->where('orderid', $order->id)
                    ->first();
    
                if ($orderproduct) {
                    $order['orderproduct'] = $orderproduct;
                    $data[] = $order;
                }
            }
        }
    
        return success('', '', $data);
    }
    

    在修改后的代码中,我们在循环遍历订单数据之前添加了条件判断,只有当订单号匹配成功时,才会查询商品名称。并且,只有在$data数组不为空时,才会返回结果。这样可以避免在没有匹配到订单号时去查询商品名称,并且在没有匹配到订单号和商品名称时返回空数据。

    希望能对你有所帮助!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月7日
  • 已采纳回答 9月29日
  • 创建了问题 9月26日