Vol*_*il3 6 php doctrine symfony doctrine-orm
我原来的查询是:
\n\nSelect * from user u\ninner join company c\non u.company_id = c.id \nwhere u.id=2\nRun Code Online (Sandbox Code Playgroud)\n\n我把它做成了:
\n\n$em = $this->get(\'doctrine\')->getEntityManager();\n $qb = $em->createQueryBuilder();\n\n $qb->select(\'u\')\n ->from(\'TemplateManager\\Bundle\\DocumentGeneratorBundle\\Entity\\User u\')\n ->innerjoin(\'u.company\')\n ->where(\'u.id = \' . $id);\n $query = $qb->getQuery();\n $result = $query->getResult();\nRun Code Online (Sandbox Code Playgroud)\n\n我得到 500,日志中包含以下详细信息:
\n\n\n\n[2016-09-27 12:06:34] request.INFO:匹配的路由\n“templatemanager_documentgenerator_api_client_find”(参数:\n“_controller”:\n“TemplateManager\\Bundle\\DocumentGeneratorBundle\\Controller\\API\\ ClientController::findAction",\n "id": "2", "_route":\n "templatemanager_documentgenerator_api_client_find") [] []\n \xe2\x80\xa8> [2016-09-27 12:06:34 ] security.DEBUG:从会话 [] []\n \xe2\x80\xa8> 读取 SecurityContext [2016-09-27 12:06:34] security.DEBUG:从用户提供程序重新加载用户。[] []\n \xe2\x80\xa8> [2016-09-27 12:06:34] security.DEBUG:用户名“admin”已从用户提供程序重新加载\n。[] []\n \xe2\x80\xa8> [2016-09-27 12:06:34] request.CRITICAL:未捕获 PHP 异常\n RuntimeException:“在调用 getRootAlias() 之前未设置别名。”\n在 //myproject//vendor/doctrine/orm/lib/Doctrine/ORM/QueryBuilder.php\n 第 423 行 {"exception":"[object] (RuntimeException(code: 0): 在调用之前未设置别名\n getRootAlias().at\n //myproject//vendor/doctrine/orm/lib/Doctrine/ORM/QueryBuilder.php:423)"}\n []\n \xe2\x80\xa8> [2016-09- 27 12:06:34] security.DEBUG:在会话 [] [] 中写入 SecurityContext
\n
尝试在 $em->createQueryBuilder(); 上添加别名;
$em->createQueryBuilder('u');
Run Code Online (Sandbox Code Playgroud)
顺便准备一下查询以避免 sql 注入
$qb->select('u')
->from('User', 'u')
->where('u.id = ?1')
->orderBy('u.name', 'ASC')
->setParameter(1, 100);
Run Code Online (Sandbox Code Playgroud)
在我自己的项目中我尝试了这个并且效果很好:
$em = $this->get('doctrine')->getEntityManager();
$qb = $em->createQueryBuilder('u');
$qb->select('u')
->from('INSIDE\Bundle\AdminBundle\Entity\TAdminUser', 'u')
->innerJoin('u.idUser' , 'myalias')
->where('u.idAdminUser = 2');
$query = $qb->getQuery();
$result = $query->getResult();
Run Code Online (Sandbox Code Playgroud)
idUser 是另一个表,不是 id,我们遇到了迁移问题:)