15

Assignment私は、別のモデル ( ) と多対 1 の関係を持つDoctrine モデル ( ) を持っていRegionます。割り当てはユーザーが所有し (各ユーザーは一度に地域ごとに 1 つの割り当てしか持たない)、indexBy割り当ての地域の ID によってユーザーの割り当ての配列をキーにするために使用しようとしています。ただし、標準の 0..n 数字キーしか取得できません。

のような DQL クエリを実行しようとするとSELECT am, reg, user FROM Assignment am INDEX BY [...] JOIN am.region reg JOIN am.user user WHERE user.id = ?1、INDEX BY のこれらの値はどれも機能しません。

  • region(エラー: 無効な PathExpression。StateFieldPathExpression である必要があります。)
  • region_id(エラー: クラス ...\Assignment には、region_id という名前のフィールドまたは関連付けがありません)
  • region.id(エラー: 文字列の終わりが必要ですが、'.' を取得しました)

これは可能ですか?Userそうでない場合、なしでリージョンの の割り当てにアクセスする便利な方法は何でしょうindexByか?

4

3 に答える 3

2

今日も同じ問題に対処していました。幸いなことに、私は解決策を見つけました:)

まず、ORM マッピングで追加の列を宣言する必要があります。

Abdulklarapl\My\EntityA:
type: entity
table: entityA
manyToOne:
    entityB:
        targetEntity: EntityB
        joinColumn:
            name: label_id
            referencedColumnName: id
id:
    id:
        type: integer
        id: true
        generator:
            strategy: AUTO
fields:
    value:
        type: text
    entityB_id:
        type: integer
lifecycleCallbacks: {  }

フィールドentityB_idとして宣言したことに注意してください+句を追加してmanyToOne関係を構成しましたjoinColumn

これで、entityB_id をスカラー値として使用できるようになりました

$doctrine->getEntityManager()->createQueryBuilder()
        ->select('c')
        ->from('AbdulklaraplMyBundle:EntityA', 'c', 'c.entityB_id')
        ->getQuery()->getResult();

連想配列を返します

[
    c.entityB_id: {
        id: "",
        value: ""
        entityB_id: ""
    }
]

AbstractQuery::HYDRATE_ARRAYの引数として使用することもできますgetResult()-オブジェクトの代わりに配列を含む連想配列を返します

于 2014-04-23T12:09:16.713 に答える
-2

Queryクラスをインポートします(オプション):

use \Doctrine\ORM\Query;

クエリを作成します。

$query = $this->data->em->createQuery('
    SELECT a 
    FROM Assignment a 
    INDEX BY a.reg //to set array custom key
    WHERE a.user = :user');
$query->setParameter('user', 3); //user with id 3

//set the hidration mode in order to work with read-only arrays
$assignments = $query->getResult(Query::HYDRATE_ARRAY); 
于 2012-09-06T04:49:55.357 に答える