0

私はsfGuardGroupPermissionレコードを管理するためのカスタム管理インターフェイスに取り組んでおり、基本的に、ユーザーが1つのインターフェイスでシステム全体のすべてのユーザーグループのアクセス許可を付与/削除できるようにしています。

私が使用しているクエリは、データベースで直接実行すると正常に機能しますが、Doctrineを介して実行およびハイドレイトすると、ほとんどのレコードが削除されているようです。

次の例を考えてみましょう。

  • テーブルに1つのレコードがあります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_Collection2つのレコードしか与えられません。最初のレコードは、テーブルにあるsf_guard_group_permissionレコードに対応し(正しい)、2番目のレコードのgroup_idはnullですが、いくつかの有効なsf_guard_permission情報が含まれています。少し奇妙に思えます。

誰かが私がどこで間違っているのかを提案できますか?

4

1 に答える 1

1

これを必要としている他の人のために...私はちょうど私のクエリが間違っていました:

$q = Doctrine_Query::create()
        ->from('sfGuardPermission p')
        ->leftJoin('p.sfGuardGroupPermission gp')
        ->leftJoin('gp.Group g')
        ->leftJoin('p.sfGuardSectionModel sm');
于 2011-08-23T15:30:09.903 に答える