Doctrline通配符WHERE查询?

时间:2010-02-26 02:47:03

标签: database symfony1 doctrine

是否可以使用Doctrine制作通配符WHERE查询,如下所示:

->where('this_field = ?', ANYTHING);

我将使用它来根据未知的用户选择的参数动态构建搜索查询,因此需要具备适当的条件但能够接受“任何”值。

要添加,我可以让它工作:

$field = 'this_field = ?';
$value = 5;
...
->where($field, $value);

...但它仍然不允许我使用“任何东西”作为值或消除整个查询条件。以下失败:

$field = NULL;
$value = NULL;
...
->where($field, $value);

由于

2 个答案:

答案 0 :(得分:2)

如果您动态构建查询,还可以检查w $value是否有值,然后根据需要添加where部分。 E.g。

$q; // Your query object.

if(isset($value)) {   // or empty() or maybe just if($value) depending on your needs.
    $q->where('this_field = ?', $value);
}

这更容易理解,更容易调试imo。

答案 1 :(得分:0)

[回答自己的问题]

在玩完这个之后,找到了一个有效的解决方案,在这里张贴给其他人。

使用->whereIn允许Doctrine完全忽略查询条件:

$empty = array();
...
->andWhereIn('this_field', $empty)

上述条件根本不会包含在生成的SQL中。