【问题标题】:doctrine fetch join query on three tables三个表上的学说获取连接查询
【发布时间】:2013-08-21 11:23:44
【问题描述】:

我的 Symfony2 项目中有三个实体:

  • 用户
  • 组织结构

第四个实体代表以上三者之间的关系:

  • UserOrganisationGroup {userId, organizationId, groupId}

现在,我需要获取以某种方式加载用户及其组和组织的连接查询。我想到了类似的东西:

SELECT u, g, o, uog 
FROM Yocto\Bundle\UserBundle\Entity\User u 
JOIN u.userOrganisationGroup uog
JOIN uog.organisation o
JOIN uog.group g
WHERE uog.user = 1

但我得到的只是用户实体,而组织和组似乎为 NULL。我究竟做错了什么?我知道数据库的记录如下:

User
id | 1

Organisation
id | 1

Group
id | 1

UserOrganisationGroup
userId         |  1
groupId        |  1
organisationId |  1



array(1) {
  [0]=>
  object(stdClass)#490 (15) {
    ["__CLASS__"]=>
    string(35) "UserBundle\Entity\User"
    ["id"]=>
    int(1)
    ["userOrganisationGroup"]=>
    array(1) {
      [0]=>
      object(stdClass)#502 (4) {
        ["__CLASS__"]=>
        string(52) "UserBundle\Entity\UserOrganisationGroup"
        ["user"]=>
        object(stdClass)#507 (15) {
          ["__CLASS__"]=>
          string(35) "UserBundle\Entity\User"
          ["id"]=>
          int(1)
          ["userOrganisationGroup"]=>
          array(1) {
            [0]=>
            object(stdClass)#525 (4) {
              ["__CLASS__"]=>
              string(52) "UserBundle\Entity\UserOrganisationGroup"
              ["user"]=>
              string(35) "UserBundle\Entity\User"
              ["group"]=>
              NULL
              ["organisation"]=>
              NULL
            }
          }
        }
        ["group"]=>
        NULL
        ["organisation"]=>
        NULL
      }
    }
  }
}

【问题讨论】:

    标签: symfony join doctrine-orm dql


    【解决方案1】:

    您根本不应该提及或加入“uog”表。

    SELECT User u,o,g
    INNER JOIN u.organisation AS o
    INNER JOIN u.group AS g
    

    避免使用 Group 等保留字来命名实体。

    【讨论】:

    • 并非如此。用户没有名为组织的关联。 @Djuro Mandinic
    • 以下 SQL 查询代表我想要实现的目标:SELECT u.username, acl_organisations.name, acl_groups.name AS group_name FROM acl_users u JOIN acl_userOrganisationGroups ON u.id = acl_userOrganisationGroups.user_id JOIN acl_organisations ON acl_userOrganisationGroups。 organization_id = acl_organisations.id 加入 acl_groups on acl_userOrganisationGroups.group_id = acl_groups.id WHERE u.id =1
    猜你喜欢
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2012-05-02
    • 2015-09-23
    • 2013-07-13
    • 1970-01-01
    相关资源
    最近更新 更多