左连接的Doctrine查询Mysql语法错误

时间:2013-03-28 20:45:03

标签: mysql symfony doctrine left-join dql

简介

我在这里遵循这个指南而且我最后一部分停留在:http://symfony.com/doc/2.0/cookbook/security/entity_provider.html

我正在尝试从帐户表中查询并加入组表。这是与中间表account_group的多对多关系。

account Table Fields: id, firstName, and email

account_group Table Fields: account_id and group_id

group Table Fields: id, name, and role

问题

这是我的DQL:

        SELECT a.firstName, g.role
        FROM WikiRosterMainBundle:Account a
        LEFT JOIN a.groups g
        WHERE a.email = :email

我收到内部服务器错误:

执行'SELECT a0_.id AS id0,a0_.firstName AS firstName1,a0_.email AS email3,g1_.role AS role18 FROM account a0_ LEFT JOIN account_group a2_ ON a0_.id = a2_.account_id LEFT JOIN时发生异常group g1_ ON g1_.id = a2_.group_id WHERE a0_.email =?'使用params {“1”:“test@test.com”}:

SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;查看与您的MySQL服务器版本相对应的手册,以便在第1行的'group g1_ ON g1_.id = a2_.group_id WHERE a0_.email ='test@test.com''附近使用正确的语法

我尝试了什么:

+将主键添加到account_group表(不起作用)

+编写我自己的左连接mysql查询并在phpmyadmin中输入(使用单个左连接,但在我尝试连接3个表时失败)

+翻转表格我正在加入/选择

我做过的研究

似乎在mysql 5中左连接已更改。我查看了文档和其他堆栈溢出问题:

http://dev.mysql.com/doc/refman/5.0/en/join.html

MySQL LEFT JOIN after 5.0.12 changes - How to rewrite query

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

基本问题是group是sql(又名GROUP BY)中的保留工作。可以通过反向滴答来解决问题,但是最好将表重命名为其他类似于groupx的东西。您可以将实体保留为组,只需更改表名即可。

答案 1 :(得分:1)

如上所述,最大的问题是命名表Group。每次引用时都需要使用反引号。我宁愿避开它们,但这是你的号召。以下是如何进行加入:

SELECT a.FirstName, g.Role
FROM Account a
LEFT JOIN account_group ag ON a.id = ag.account_id
LEFT JOIN `group` g ON ag.group_id = g.id