【问题标题】:CakePHP Find Conditions Optional ParametersCakePHP 查找条件可选参数
【发布时间】:2015-02-12 13:50:46
【问题描述】:

我想在 POST 传递给我的控制器的过滤器之后获取行,但参数是可选的,有时它们可​​能为空,规则是:每当一个字段传递为空时,获取所有行(不要过滤)。

我可以在原始 sql 中做到这一点:

SELECT * from users where id = $param OR $param IS NULL 

但我不知道如何使用这种 CakePHP 方式。尝试了很多组合。我现在的阶段是这样的:

[...]

'conditions' => array(
                        array(
                            'OR' => array(
                                'Request.id' => $this->request->data['Search']['id'],
                            ),

基本上,我不知道如何执行查询的“OR $param IS NULL”部分。 在目前的情况下,当我从视图中传递一个 'id' 参数时,我可以成功地获取行,但如果我不传递任何东西(空 ID),结果是 0 行,应该是所有行。

我使用 Postgres 作为 SGBD。

谢谢

使用解决方案编辑

按照@Vin000 的思路,我可以做到:

$conditions = array();

        if(isset($this->request->data['Search']['id'] ) and $this->request->data['Search']['id'] != null ) 
        { 
            $conditions['Request.id'] = $this->request->data['Search']['id']; 
        }

这解决了我的问题。

【问题讨论】:

  • 这两个子句加在一起似乎不正确。 id = $param 暗示 $param 是一个整数或 UUID,因为它是 ID 列的值。 $param is NULL 暗示 $param 是用户表中列的名称。我想你想用 php 编程 - 如果 $param 有一个值,请使用条件子句。如果不使用 $param,请不要使用条件子句

标签: php cakephp


【解决方案1】:

如果您从 URL 传递数据,则应使用 $this->request->params 或 $this->params->query。如果您从 URL 发送数据,则无法访问 $this->request->post 中的数据。请添加如下几个条件。

    $conditions = array();

            if (!empty($this->params->query['keywords']))
                $conditions[] = array($this->params->query['search_by'] . ' like' => "%" . $this->params->query['keywords'] . "%");

            if (!empty($this->request->params['pass']))
                $conditions[] = //Your conditions

我个人建议您从 URL 传递查询参数,这样您就可以知道值是什么以及哪个参数。

【讨论】:

  • 我拼错了,我是从 POST 而不是从 URL 传递...我将编辑我的问题。
猜你喜欢
  • 1970-01-01
  • 2015-09-13
  • 2011-10-22
  • 1970-01-01
  • 2012-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多