MySQL Пользовательская переменная в Doctrine и Symfony - PullRequest
4 голосов
/ 01 июля 2011

У меня есть следующее утверждение Доктрины, которое прекрасно работает.

$query = $this->createQuery('r')
            ->select('u.id, CONCAT(u.first_name, " ", LEFT(u.last_name,1)) as full_name, u.first_name, u.last_name, u.gender, r.run_time')
            ->innerJoin('r.ChallengeUser u')
            ->orderBy('run_time')
            ->execute(array(), Doctrine::HYDRATE_ARRAY_SHALLOW);

Мне нужно добавить количество строк в это. Теперь я знаю, что с сырым SQL вы можете сделать это;

SET @rank=0;
SELECT @rank:=@rank+1 as rank, u.id, u.first_name ....etc

Итак, мой вопрос, как я могу заставить это работать с Symfony 1.4 и Doctrine? Я использую MySQL для этого проекта.


Редактировать ... Я понял это ..

Doctrine_Manager::getInstance()->getCurrentConnection()->standaloneQuery('SET @rank=0;')->execute();

$query = $this->createQuery('r')
            ->select('r.run_time, @rank:=@rank+1 rank, r.user_id, CONCAT(u.first_name, " ", LEFT(u.last_name,1)) as full_name, u.first_name, u.last_name, u.gender')
            ->leftJoin('r.ChallengeUser u')
            ->orderBy('run_time')
            ->execute(array(), Doctrine::HYDRATE_ARRAY_SHALLOW);

Добавьте автономный запрос, чтобы установить переменную, и поменяйте местами внутреннее соединение на левое соединение.

1 Ответ

1 голос
/ 07 августа 2012

, если вы используете MySQL, и переключений на другие СУБД не предвидится, возможно, вы могли бы попробовать

$query = $this->createQuery('r')
            ->select('COUNT(u.id) as rank, u.id, CONCAT(u.first_name, " ", LEFT(u.last_name,1)) as full_name, u.first_name, u.last_name, u.gender, r.run_time')
            ->innerJoin('r.ChallengeUser u')
            ->orderBy('run_time')
            ->execute(array(), Doctrine::HYDRATE_ARRAY);
...