将WHERE子句附加到Doctrine_Query

时间:2012-01-21 18:09:57

标签: php doctrine doctrine-1.2

我有一种情况,我想根据天气组装一个Doctrine选择查询某些参数是空的或不是。例如,如果有一个$ slug变量是可选的,我想要这样的东西:

function get_bio($slug = '')
{
     $q = Doctrine_Query::create()
        ->from('Bio b');

     if (!empty($slug))
     {
          $q .= $q->where('b.slug = ?', $slug);
     }
 }

我知道这不是正确的语法,但我怎么组装这样的东西?

3 个答案:

答案 0 :(得分:1)

Answer by dtj


显然,我并没有太远。这是正确的语法:

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()