数据库
首页 > 数据库> > php – MySQL在Doctrine和Symfony中定义的变量

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