我有一种情况,我想根据天气组装一个Doctrine选择查询某些参数是空的或不是。例如,如果有一个$ slug变量是可选的,我想要这样的东西:
function get_bio($slug = '')
{
$q = Doctrine_Query::create()
->from('Bio b');
if (!empty($slug))
{
$q .= $q->where('b.slug = ?', $slug);
}
}
我知道这不是正确的语法,但我怎么组装这样的东西?
答案 0 :(得分:1)
显然,我并没有太远。这是正确的语法:
function get_bio($slug = '')
{
$q = Doctrine_Query::create()
->from('Bio b');
if (!empty($slug))
{
$q = $q->where('b.slug = ?', $slug);
}
}
就像删除点一样简单:)
答案 1 :(得分:0)
为什么不进行两次查询?在我看来,你为此做一个功能没有意义,但只有我的意见。我会这样做:
if ($slug != NULL) {
$q = Doctrine_Query::create()
->from('Bio b');
->where('b.slug = ?', $slug);
}
else {
$q = Doctrine_Query::create()
->from('Bio b');
}
这也不是正确的语法。
答案 2 :(得分:0)
您将查询对象视为字符串而不是对象。试试这个:
function get_bio($slug = '')
{
$q = Doctrine_Query::create()
->from('Bio b');
if (!empty($slug))
{
$q->where('b.slug = ?', $slug);
}
}
请注意,对$q->where()
的调用直接在查询对象$q
上运行,因此您不必将返回值分配给任何内容(它返回对查询对象本身的引用,以便您可以链方法调用)。
另请注意,如果您计划添加多个where
子句,则可能需要使用andWhere()
而不是where()
。