【发布时间】: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,请不要使用条件子句