是否可以使用Doctrine制作通配符WHERE查询,如下所示:
->where('this_field = ?', ANYTHING);
我将使用它来根据未知的用户选择的参数动态构建搜索查询,因此需要具备适当的条件但能够接受“任何”值。
要添加,我可以让它工作:
$field = 'this_field = ?';
$value = 5;
...
->where($field, $value);
...但它仍然不允许我使用“任何东西”作为值或消除整个查询条件。以下失败:
$field = NULL;
$value = NULL;
...
->where($field, $value);
由于
答案 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中。