RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 767848
Accepted
Alexxosipov
Alexxosipov
Asked:2020-01-08 08:10:56 +0000 UTC2020-01-08 08:10:56 +0000 UTC 2020-01-08 08:10:56 +0000 UTC

过滤不同页面的产品(Laravel)

  • 772

有以下路线:

site/catalog/  // catalogController@index
site/catalog/parentCategory/childrenCategory //childrenCategoryController@index
site/catalog/parentCategory //parentCategoryController@index

目录页面显示所有产品,类别页面显示属于这些类别的所有产品。每个页面都有一个产品过滤器,以获取请求的形式实现,即site/catalog/?price_from=0&price_to=9999&color=red

每个页面的过滤器完全相同。你能告诉我写这一切的最好方法吗?复制每个控制器的代码是不礼貌的,过滤器的小改动,这将需要到处更改,随着时间的推移将变得非常难以维护。最好的方法是什么?

php
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Orange_shadow
    2020-01-08T15:36:16Z2020-01-08T15:36:16Z

    我把过滤器带进模型,处理目录的控制器也可以只留一个,直接把所有去的

    Route::get('/catalog/{some_path?}', 'ТвойКласс@МетодОбработки')->where('some_path', '(.*)');
    

    ,这里是一个例子,你做一个范围搜索并在其中绘制所有过滤逻辑,我将有一个过滤订单的例子,但这不是重点:

    订单模式

    /**
         * @param $query
         * @param Request $request
         * @return mixed
         */
        public function scopeSearch($query, Request $request)
        {        
            if ($request->has('product')) {
                $query->leftJoin('products as p','p.id','=','orders.product_id')
                      ->where('p.title','like','%'.$request->get('product').'%');
            }
    
            if ($request->has('sn')) {
                $query->where('sn','like','%'.$request->get('sn').'%');
            }
    
            if ($request->has('owner')) {
                $query->leftJoin('users as u','u.id','=','orders.user_id')
                    ->where('u.name','like','%'.$request->get('owner').'%');
            }
    
            if ($request->has('customer_fio')) {
                $query->where('customer_fio','like','%'.$request->get('customer_fio').'%');
            }
    
            if ($request->has('customer_phone')) {
                $query->where('customer_phone','like','%'.$request->get('customer_phone').'%');
            }
    
            if ($request->has('oStartDate') && $request->has('oEndDate')) {
    
                $startDate = Carbon::parse($request->get('oStartDate'));
                $endDate = Carbon::parse($request->get('oEndDate'));
    
                $query->whereBetween('order_dt', [$startDate->format('Y-m-d 00:00:00'), $endDate->format('Y-m-d 23:59:59')]);
    
            }
    
            if ($request->has('cStartDate') && $request->has('cEndDate')) {
    
                $startDate = Carbon::parse($request->get('cStartDate'));
                $endDate = Carbon::parse($request->get('cEndDate'));
    
                $query->whereBetween('created_at', [$startDate->format('Y-m-d 00:00:00'), $endDate->format('Y-m-d 23:59:59')]);
    
            }
    
    
            $query->select('orders.*');
    
            return $query;
        }
    

    然后控制器本身将如下所示:首先,您可以检查输入变量使用哪个路径并了解仆人它是什么(产品类别或列表),然后知道产品在哪里:

    $data = Product::where('slug',$slug)->search($request)->orderBy('created_at', 'desc')->paginate(50);
    
    • 2

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5