Doctrine查询无法识别简写:基于构建条件的查询

时间:2011-07-13 10:47:20

标签: mysql database doctrine

public static function getAuctions($other = false)
{
    $q = Doctrine::getTable('auctions')
      ->createQuery('u')
      ->select('TIMEDIFF(ends_at, NOW()) as time, ur.username as username, u.last_bider as last_bider,
         pr.img_path as img_path, u.curr_price as price, pr.title as title, u.ends_at as ends_at,
         ur.bids_left as bids_left')
      ->leftJoin('u.Products pr')
      ->leftJoin('u.sfGuardUser ur')
      ->where('u.ends_at > ?', date('Y-m-d H:i:s', time() - 5))
      ->andWhere('u.status = ?', 'Live');


    ***if($other == true)
        $q->andWhere('time > ?', '01:00:00');***

    $q->orderBy('time');

    return $q->execute();
}

这个查询在if子句上失败,说mysql找不到时间列。我在开始时就把它命名为“时间”。

如果我使用

if($other == true)
            $q->andWhere('TIMEDIFF(ends_at, NOW()) > ?', '01:00:00');

它有效,但我不想重复自己。

任何解决这个问题的方法(或者是否有更实际的方法在学说中构建这些基于条件的查询?)。

1 个答案:

答案 0 :(得分:2)

select子句在where子句之后执行,因此无法在where子句中引用select子句定义的别名。

可以做的是用一个子选项替换表:

select time, id
from (
    select TIMEDIFF(ends_at, NOW()) as time, id
    from auctions
) auctions

不知道你的情况是否值得。