Symfony: самый эффективный способ получить список sfGuardPermissions и sfGuardGroups, которые имеют их - PullRequest
0 голосов
/ 23 августа 2011

Я работаю над пользовательским интерфейсом администратора для управления записями sfGuardGroupPermission, в основном позволяя пользователю предоставлять / удалять разрешения для всех групп пользователей в системе в одном интерфейсе.

Используемый мной запрос работаетпрекрасно, когда выполняется непосредственно в базе данных, но при выполнении и гидратации через Doctrine, похоже, большинство его записей удаляется.

Рассмотрим следующий пример:

  • У меня есть одна запись в таблице sf_guard_group_permission
  • У меня есть 62 записи в таблице sf_guard_permission
  • У меня 42 записей в sf_guard_group таблице

Я использую объект Doctrine_RawSql для построения запроса, это выглядит следующим образом:

$q->select('{p.*}, {gp.*}, {g.*}')
                ->from('sf_guard_permission p
                    LEFT OUTER JOIN sf_guard_group_permission gp ON p.id = gp.permission_id
                    LEFT OUTER JOIN sf_guard_group g ON g.id = gp.group_id')
                ->addComponent('gp', 'sfGuardGroupPermission gp')
                ->addComponent('p', 'gp.Permission p')
                ->addComponent('g', 'gp.Group g');

И если я получаю необработанный sqlиспользуя getSqlQuery() я получаю следующее (которое возвращает правильный результат - список всех разрешений, оставленных присоединенными любыми группами, имеющими эти разрешения ...

SELECT gp.group_id AS gp__group_id, gp.permission_id AS gp__permission_id, gp.created_at AS gp__created_at, gp.updated_at AS gp__updated_at, p.id AS p__id, p.name AS p__name, p.description AS p__description, p.section_model_id AS p__section_model_id, p.created_at AS p__created_at, p.updated_at AS p__updated_at, g.id AS g__id, g.name AS g__name, g.description AS g__description, g.created_at AS g__created_at, g.updated_at AS g__updated_at 
    FROM sf_guard_permission p 
    LEFT OUTER JOIN sf_guard_group_permission gp 
         ON p.id = gp.permission_id 
    LEFT OUTER JOIN sf_guard_group g 
         ON g.id = gp.group_id

Когда я запускаю запрос через доктрину и var_dump мой результат Doctrine_CollectionМне всего 2 записи.Первая запись соответствует записи sf_guard_group_permission, которую я имею в своей таблице (правильно), вторая запись имеет значение group_id, равное нулю, но содержит некоторую допустимую sf_guard_permission информацию.Это кажется немного странным.

Может кто-нибудь подсказать, где я ошибаюсь?

1 Ответ

1 голос
/ 23 августа 2011

Для кого-то еще нуждающегося в этом ... Я просто неправильно спросил:

$q = Doctrine_Query::create()
        ->from('sfGuardPermission p')
        ->leftJoin('p.sfGuardGroupPermission gp')
        ->leftJoin('gp.Group g')
        ->leftJoin('p.sfGuardSectionModel sm');
...