我正在开发一个用于管理 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');
如果我使用原始 sqlgetSqlQuery()
得到以下内容(返回正确的结果 - 由具有这些权限的任何组加入的所有权限的列表...
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
信息。似乎有点奇怪。
有人可以建议我哪里出错了吗?