0

介绍

我在这里遵循本指南,我被困在最后一部分: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 在哪里 a0_.email = ?带参数 {"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

5.0.12 更改后的 MySQL LEFT JOIN - 如何重写查询

谢谢你的帮助!

4

2 回答 2

1

基本问题是 group 是 sql 中的保留工作(又名 GROUP BY)。可以使用反引号解决此问题,但最好将表重命名为其他名称,例如 groupx。您可以将实体保留为组,只需更改表名。

于 2013-03-28T21:43:00.540 回答
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
于 2013-03-28T21:52:34.870 回答