【问题标题】:Laravel combine query with if statementLaravel 将查询与 if 语句结合起来
【发布时间】:2020-08-03 17:01:57
【问题描述】:

我正在使用 AJAX 进行产品过滤。有没有可能使用查询生成器产生与下图相同的输出?

我尝试过联合,但它不起作用。

【问题讨论】:

    标签: ajax laravel query-builder laravel-query-builder


    【解决方案1】:

    我希望这个例子能给出想法,试试这个

    使用多个 if 语句并使用连接将数据放入数据库。

    function datatables($request) {
            $data = $this->leftJoin('blog_category', 'blog_category.blog_category_uuid', '=', 'blog_detail.blog_category_uuid')
                    ->where('blog_detail.blog_detail_is_deleted', 'NO');
    
            if ($request->search['value'] != null && $request->search['value'] != '') {
                $keyword = $request->search['value'];
                $data = $data->where(function($query) use ($keyword) {
    //                $query->orWhere('activity_type.activity_type_name', 'LIKE', '%' . $keyword . '%');
                    $query->orWhere('blog_detail.blog_detail_title', 'LIKE', '%' . $keyword . '%');
                });
            }
            if (isset($request->order[0]['dir'])) {
                $data = $data->orderBy('blog_detail.blog_detail_id', $request->order[0]['dir']);
            } else {
                $data = $data->orderBy('blog_detail.blog_detail_created_date');
            }
            $datacount = $data->count();
            $dataArray = $data->select('blog_detail.*', 'blog_category.blog_category_name' , DB::raw('DATE_FORMAT(blog_detail.blog_detail_created_date,"%Y-%m-%d") as blog_detail_date'));
            if ($request->length == -1) {
                $dataArray = $dataArray->get();
            } else {
                $dataArray = $dataArray->skip($request->start)->take($request->length)->get();
            }
            return [$datacount, $dataArray];
        }

    【讨论】:

    • 非常感谢!在查看此内容后,我可以相应地修改我的代码并且它有效!
    【解决方案2】:

    在 laravel 中,您可以为产品创建模型,例如 Product。那么查询会是这样的

    $products = Product::where('product_status', '1');
    if ($request->input('minimum_price') && $request->input('maximum_prize')) {
        $products = $products->whereBetween('product_prize', array($request->input('minimum_price'), $request->input('maximum_prize')));
    }
    if ($request->input('brand')){
        $brand_filter = implode("','", $request->input('brand'));
        $products = $products->whereIn('product_brand', $brand_filter);
    }
    $products = $products->get();
    

    执行后$products包含查询后的产品。

    【讨论】:

      猜你喜欢
      • 2022-12-06
      • 1970-01-01
      • 2021-09-18
      • 2020-10-31
      • 2014-12-23
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 2014-04-05
      相关资源
      最近更新 更多