php – MySQL在Doctrine和Symfony中定义的变量
作者:互联网
我有以下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);
我需要在此添加行计数.现在我知道使用原始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,并且没有预见到其他DBMS的切换,也许您可以尝试
$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);
标签:php,mysql,doctrine,symfony1,symfony-1-4 来源: https://codeday.me/bug/20190710/1419186.html