У меня есть следующая инструкция Doctrine, которая работает нормально.
$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);
Мне нужно добавить количество строк в это. Теперь я знаю, что с помощью raw 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);
Добавьте автономный запрос для установки переменной и замените внутреннее соединение на левое соединение.
если вы используете 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);