Symfony:获取sfGuardPermissions和sfGuardGroups列表的最有效方法

问题描述:

我正在处理sfGuardGroupPermission记录的自定义管理界面,基本上允许用户授予/删除系统中所有用户组的权限接口。Symfony:获取sfGuardPermissions和sfGuardGroups列表的最有效方法

我正在使用的查询在数据库中直接执行时工作正常,但在通过Doctrine执行和水合时,它似乎将其大部分记录删除。

请看下面的例子:

  • 我在sf_guard_group_permission
  • 我记录在sf_guard_permission
  • 我记录在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'); 

而且如果我使用getSqlQuery()原始SQL我得到以下(返回正确的结果 - 所有的权限列表留下的是拥有这些权限的任何组加入...

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为null,但包含一些有效的sf_guard_permission信息。这似乎有点奇怪。

有人可能会建议我哪里出错了吗?

对于任何人需要这个......我只是我的错查询:

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