【问题标题】:Symfony: Most efficient way of getting list of sfGuardPermissions and sfGuardGroups that have themSymfony:获取 sfGuardPermissions 和拥有它们的 sfGuardGroups 列表的最有效方法
【发布时间】:2011-08-23 09:07:13
【问题描述】:

我正在开发一个用于管理 sfGuardGroupPermission 记录的自定义管理界面,基本上允许用户在一个界面中授予/删除系统中所有用户组的权限。

我使用的查询在直接在数据库中执行时可以正常工作,但是当通过 Doctrine 执行和补充时,它的大部分记录似乎都被删除了。

考虑以下示例:

  • 我在sf_guard_group_permission 表中有一个记录
  • sf_guard_permission 表中有 62 条记录
  • sf_guard_group 表中有 42 条记录

我正在使用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 信息。好像有点奇怪。

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

【问题讨论】:

    标签: symfony1 doctrine symfony-1.4 sfguard


    【解决方案1】:

    对于需要这个的其他人...我只是查询错误:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      相关资源
      最近更新 更多