Doctrine запрос не распознает сокращение: построение запросов на основе условий - PullRequest
0 голосов
/ 13 июля 2011
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 Ответ

2 голосов
/ 13 июля 2011

Предложение select выполняется ПОСЛЕ предложения where, поэтому невозможно сослаться на псевдоним выбора, определенный в предложении where.

Что можно сделать, это заменить таблицу подвыбором:

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

Не знаю, стоит ли это в вашем случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...