2017-01-25 15 views
1

нужно загрузить некоторые данные разрешения от унаследованного приложения, которое имеет юридические лица пользователя, группы, разрешение вместе с 2 ManyToMany ассоциациямиучения присоединиться manytomany дважды не работает

Однако, когда я либо создать запрос с

  • пользователя, а затем присоединиться к группе, то разрешение или
  • Разрешение, затем присоединиться к группе, то пользователь

Я получаю ошибки SQL, показывая Doctrine USIN g неправильная таблица для присоединения к 2-му отношению.

Когда я начинаю с пользователем

$qb = $this->getEm()->getRepository('AppBundle:User') 
    ->createQueryBuilder('u') 
    ->addSelect('p.file') 
    ->innerJoin('u.groups', 'g') 
    ->innerJoin('g.permissions', 'p') 
    ->andWhere('u.user_id = :user_id') 
    ->setParameter('user_id', $loginRow->getUserId()); 

созданный запрос:

SELECT u0_.user_id AS user_id_0, u0_.real_name AS real_name_1, 
u0_.email_address AS email_address_2, u0_.password AS password_3, 
u0_.login_active AS login_active_4, p1_.file AS file_5 
FROM users u0_ INNER JOIN groups_members g3_ ON u0_.group_id = g3_.group_id 
INNER JOIN groups g2_ ON g2_.user_id = g3_.user_id 
INNER JOIN permissions_groups p4_ ON g2_.group_id = p4_.group_id 
INNER JOIN permissions p1_ ON p1_.permission_id = p4_.permission_id 
WHERE u0_.user_id = ?' with params [10]: 

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'u0_.group_id' in 'on clause' 

Когда я начинаю с разрешения

$qb = $this->getEm()->getRepository('AppBundle:Permission') 
    ->createQueryBuilder('p') 
    ->addSelect('u.user_id') 
    ->innerJoin('p.groups', 'g') 
    ->innerJoin('g.users', 'u') 
    ->andWhere('u.user_id = :user_id') 
    ->setParameter('user_id', $loginRow->getUserId()); 
$rolesData = $qb->getQuery()->getResult(); 

я получаю:

SELECT p0_.permission_id AS permission_id_0, p0_.file AS file_1, 
p0_.function AS function_2, p0_.system AS system_3, p0_.description AS description_4, 
p0_.permission_depends_on_id AS permission_depends_on_id_5, p0_.helpinfo AS helpinfo_6, 
p0_.active AS active_7, u1_.user_id AS user_id_8 
FROM permissions p0_ 
INNER JOIN permissions_groups p3_ ON p0_.permission_id = p3_.permission_id 
INNER JOIN groups g2_ ON g2_.group_id = p3_.group_id 
INNER JOIN groups_members g4_ ON g2_.user_id = g4_.user_id 
INNER JOIN users u1_ ON u1_.group_id = g4_.group_id WHERE u1_.user_id = ?' with params [10]: 

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'g2_.user_id' in 'on clause' 

Моя конфигурация объект находится ниже

AppBundle\Entity\User: 
    type: entity 
    table: users 
    id: 
     user_id: 
      type: integer 
      generator: { strategy: AUTO } 
    manyToMany: 
     groups: 
      targetEntity: Group 
      inversedBy: users 
      joinTable: 
       name: groups_members 
       joinColumns: 
        group_id: 
         referencedColumnName: group_id 
       inverseJoinColumns: 
        user_id: 
         referencedColumnName: user_id 
    fields: 
     real_name: 
      type: string 
      length: 255 
     email_address: 
      type: string 
      length: 255 
     password: 
      type: string 
      length: 50 
     login_active: 
      type: integer 

AppBundle\Entity\Group: 
    type: entity 
    table: groups 
    id: 
     group_id: 
      type: integer 
      generator: { strategy: AUTO } 
    manyToMany: 
     users: 
      targetEntity: User 
      mappedBy: groups 
     permissions: 
      targetEntity: Permission 
      inversedBy: groups 
      joinTable: 
       name: permissions_groups 
       joinColumns: 
        group_id: 
         referencedColumnName: group_id 
       inverseJoinColumns: 
        permission_id: 
         referencedColumnName: permission_id 
    fields: 
     group_name: 
      type: string 
      length: 255 
     group_description: 
      type: string 
      length: 255 
     max_booking_slots: 
      type: integer 

AppBundle\Entity\Permission: 
    type: entity 
    table: permissions 
    id: 
     permission_id: 
      type: integer 
      generator: { strategy: AUTO } 
    manyToMany: 
     groups: 
      targetEntity: Group 
      mappedBy: permissions 
    fields: 
     file: 
      type: string 
      length: 255 
     function: 
      type: string 
      length: 255 
     system: 
      type: integer 
     description: 
      type: string 
      length: 255 
     permission_depends_on_id: 
      type: integer 
     helpinfo: 
      type: string 
      length: 50 
     active: 
      type: integer 

Это Symfony 3.1.9 с доктриной 1.6.7

ответ

2

Вы были перевернутой joinColumns и inverseJoinColumns в "Пользователь в группе" отображение.

Так это исправить, так:

AppBundle\Entity\User: 
    manyToMany: 
     groups: 
      targetEntity: Group 
      inversedBy: users 
      joinTable: 
       name: groups_members 
       joinColumns: 
        user_id: 
         referencedColumnName: user_id     
       inverseJoinColumns: 
        group_id: 
         referencedColumnName: group_id