Database 条令通配符在哪里查询?

Database 条令通配符在哪里查询?,database,symfony1,doctrine,Database,Symfony1,Doctrine,有没有可能在查询时使用通配符,例如: ->where('this_field = ?', ANYTHING); 我将使用它来根据未知的用户选择的参数动态构建搜索查询,因此需要有适当的条件,但能够接受值“anything” 另外,我可以让它工作: $field = 'this_field = ?'; $value = 5; ... ->where($field, $value); 。。。但它仍然不允许我使用“任何东西”作为值或消除整个查询条件。以下操作失败: $field = NU

有没有可能在查询时使用通配符,例如:

->where('this_field = ?', ANYTHING);
我将使用它来根据未知的用户选择的参数动态构建搜索查询,因此需要有适当的条件,但能够接受值“anything”

另外,我可以让它工作:

$field = 'this_field = ?';
$value = 5;
...
->where($field, $value);
。。。但它仍然不允许我使用“任何东西”作为值或消除整个查询条件。以下操作失败:

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

谢谢

[回答自己的问题]

在玩了这个之后,找到了一个有效的解决方案,在这里为其他人发布

使用
->,其中
允许条令完全忽略查询条件:

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

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

如果动态生成查询,还可以检查是否有值,然后根据需要添加where部分。例如

$q; // Your query object.

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

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

我想有更好的方法来解决您的问题。另外,允许用户指定where子句可能是一个安全问题。谢谢-不允许用户这样做,但只需要处理大量可选的下拉值。有没有想过更好的方法是什么?菲利克斯,啊,是的,确实是这样。操作查询对象是动态构建查询对象的最简单方法。谢谢