【问题标题】:how can I filter data cumulatively in CakePHP如何在 CakePHP 中累积过滤数据
【发布时间】:2013-02-10 10:43:57
【问题描述】:

我对 CakePHP 和面向对象编程比较陌生。我以前在 CakePHP 中构建过应用程序,但从来没有达到这个程度,因此我寻求帮助。

我有一个大型产品管理数据库,用户需要能够设置过滤条件以找到最接近的产品匹配项。

产品表包含与各个表相关的category_id、manufacturer_id、type_id、status_id。

我有一个带有每个过滤器下拉框的侧边栏,并且希望所有过滤器一起工作,例如,如果选择了制造商和产品类型,则显示这些过滤结果,并将状态和类别下拉列表更改为仅包含来自已过滤结果的选项。

过去我通过使用基于用户输入的动态查询设置条件来完成此操作,每次应用过滤器时都附加 where 子句。

到目前为止,我只能使用

获得单独过滤的结果
$this->Product->recursive = 0;
    $mid = (isset($this->params['named']['mid'])) ? $this->params['named']['mid'] : '';
    if(!empty($mid)){
        $this->paginate = array(
            'conditions' => array('Product.manufacturer_id' => $mid),
            'limit' => 10
        );
    }
    $products = $this->paginate('Product');
    $this->set(compact('products'));

其中'mid'是制造商ID,这是在url中手动输入'mid'

如果用户设置了category_id、manufacturer_id、type_id、status_id或任意组合,如何获得累积过滤结果?我将使用哪些查询来重新填充下拉列表?

(最终我会使用 ajax,但现在假设我有 4 个带有提交按钮的下拉框)

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    漫长的路是:

    var $conditions = array();
    
    if (isset($this->params['named']['mid']) && !empty($this->params['named']['mid'])){
       $conditions['Product.manufacturer_id'] = $this->params['named']['mid']);
    }
    if (isset($this->params['named']['catid']) && !empty($this->params['named']['catid'])){
       $conditions['Product.category_id'] = $this->params['named']['catid']);
    }
    if (isset($this->params['named']['statid']) && !empty($this->params['named']['statid'])){
       $conditions['Product.status_id'] = $this->params['named']['statid']);
    }
    
    $this->paginate['conditions'] = $conditions;
    $this->paginate['limit'] = '10';
    $this->set('products', $this->paginate('Product'));
    

    一旦你掌握了窍门,你就可以将所有的检查放入一个循环中。

    【讨论】:

    • 谢谢,这是我一直在寻找的,语法有一些错误,但逻辑在那里。抱歉这么久才回复,这个项目已经延迟,但感谢您的帮助。最终,CakeDCs 搜索插件将完全符合我的要求,能够通过多个属性进行过滤,累积。再次感谢!
    • @Tim Joyce thanx 它对我有用,但 url 看起来很糟糕 ei localhost/businesses/index?category=&category=1&category=2&country=&country=1&country=2&state=&state=1&state =2&city=&city=1&city=2 如何让这个 url 对 SEO 友好。
    • @ErFaiyazAlam 结帐book.cakephp.org/2.0/en/development/routing.html#route-elements。您可以访问这些 url 参数,就像访问通过 url `/somecontroller/3/param1/param2 ...etc 传递的控制器中的 id 一样
    • @Tim Joyce 感谢您的回复。我一定会这样做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 2022-01-24
    • 2021-03-19
    • 2020-03-16
    相关资源
    最近更新 更多