2017-02-02 6 views
1

エンティティとスカラーの結果を含む混合ResultSetMappingを使用してnativeQueryを生成しようとしています。Symfony2 - NativeQueryの結果キーからエンティティにアクセスする

array:2 [▼ 
    0 => Evaluation {▼ 
    #id: 24 
    } 
    "company" => "INRA" 
] 

だから、結果の配列で、同社がで識別されます。例:私は、クエリ結果の要素のうちの1つを{{()}ダンプ}、それはこのようになります

$rsm = new ResultSetMapping();   
$rsm->addEntityResult('MyBundle:Evaluation','e'); 
$rsm->addFieldResult('e','id','id'); 
$rsm->addScalarResult('company','company'); 

私の評価エンティティが「0」キーで識別されている間は「会社」キー。

質問:ResultSetMapping()で定義されたエンティティに数値キー以外でアクセスする別の方法がありますか? ScalarResultsのような?

+0

実際の問題は何ですか? – rubin

+0

私のコードはうまく動作しますが、$ result ['evaluation']の代わりに$ result [0]のようなことを余儀なくされています。たとえば、$ result [8]を読み込むことができず、このコードを見ている開発者は、$ result [8]に含まれるデータの種類を知るためにリポジトリクラスを開く必要があります。さらに、クエリの開始時に他のエンティティ結果を追加した場合、以前のすべての参照がバグの原因になります。これは、オフセットが存在するためです。 – alpadev

+0

私はちょうどあなたのコメントに気づいた、あなたは2または3 EntityResultsでより複雑な例を提供できますか?それはいくつかの概念が間違っているようです。複数の要素をフェッチするときは、ループを使って繰り返し処理します。各要素は同じプロパティを持つ必要があります。このように配列要素に直接アクセスすると、$ result [8]はコード内に何か問題があることを示します。 – lchachurski

答えて

0

返された結果の数は、クエリと関連付けられており、ResultSetMappingオブジェクトではありません。

あなたは$query->getSingleResult()に切り替えたり$query->getOneOrNullResult()複数の結果が利用可能な場合、これらのメソッドは例外をスローに注意してくださいすることができ、あなたがデータをフェッチするために$query->getResult();を使用していると仮定。

あなたはまた、(最も可能性が高い)は、最後の行を更新する必要があり、そして同じエイリアスの下にあるすべてのものを置く:

$rsm->addScalarResult('company','e');

セカンドparamは別名docsを表します。さらに、simillarの問題がカバーされましたhere

これが役立ちます。

+0

これは問題ではない、私は私のクエリで複数の結果を得て、それはいいです!私の記事で述べたように、私が表示したデータ(doctrineのdump()関数から)は、結果セットの1要素しか表していません。つまり、foreach結果の行には$ result [0]と$ result ['company']があります。私が望むのは、コードの可読性とメンテナンス性のために、$ result [0]の代わりに$ result ['evaluation']のようなカスタムキーです – alpadev

関連する問題