2017-07-13 5 views
1

私はsymfony 3.3の下でdoctrineで実際に遭遇したことがないことに気付きました。ジョイント付きのDoctrineクエリービルダー - 水和物配列

いくつかの結合でquerybuilderを使用すると、結果セットの結果セットで結果の配列の新しいローに各テーブルが作成されます。 たとえば、t1とt2をt3に結合すると、これら3つの配列項目は、単一の参加「行」を構成するエンティティ/「テーブル」のそれぞれに対応

$results[0] => (row1 entity for t3) 
$results[1] => (row1 entity for t1) 
$results[2] => (row1 entity for t2) 

$results[3] => (row2 entity for t3) 
$results[4] => (row2 entity for t1) 
$results[5] => (row2 entity for t2) 

:それぞれが教義のエンティティであり、私は少しこのようになり、結果が戻ってきます結果セットの

私はHYDRATE_SCALARが私に、結果配列の各要素が完全な1つのスカラー行を含むより伝統的なスカラー(duh .. no shock)結果を与えることを発見しました。 (

私は、独自のヘルパーメソッドを書かずにネイティブにsymfony/doctrineを使用する方法があると思います。それぞれの要素が1つの行に対応する結果配列を得ることができます。結果セット内におそらく上記のエンティティオブジェクトのそれぞれのキーがありますか?

または、それ以外にも人々は通常どのようにこれを使用しますか? このような結果セットを反復することは安全ですか?上の例の3つの配列要素の各セットを1つの '行'として扱いますか?つまり、配列を3にチャンクするか、一度に3つずつ繰り返しますか?

この動作は本当に私を驚かせ、非常に直感的ではないようです。この背後にある考え方が何であるかについてのここでの教育は、あまりにも役に立つでしょう。

また、HYDRATE_ARRAYを使用すると、これは、定義しているOneToOne、OneToMany、またはManyToOne関係の関連エンティティを水和するようには見えません。私は、関連するエンティティプロパティを含む多次元配列を期待しています。希望の考え方、またはこれを実現できますか(もう一度、ヘルパメソッドを追加する必要はありません)

ありがとうございます!

*編集 - あなたの実際のクエリを見ずに私の例

答えて

0

でミスが、私は確かに言うことはできませんが、私はあなたが参加するフェッチを使用している疑いがあります。

教義は、それが結果配列のルートレベルにFROM句でクラスを返しフェッチ参加してクエリを水和するとき

:​​

ここでは、これを説明するdocsの関連部分です。

SELECT u FROM User u JOIN u.address aをこのクエリと比較してください。このクエリでは、Userインスタンスの配列が返され、各ユーザのアドレスがフェッチされ、User#address変数に水和されます。

+0

これを読んで応答するのが遅れて申し訳ありません!しかし、私はこれを試し、それが(必然的に)うまくいくと答えたことをマークします! –

+0

select()の内容を自分のjoin内のエンティティの1つに変更するだけで、これらのドキュメントを読み込んだだけで問題は解決しますか?私の最初のselect()で複数のテーブルを要求していますが、それらはネストされた方法ではなく個別のオブジェクトとして結果配列のルートレベルに水和されます。それを手に入れました(まだ試してみる必要があります) –

+0

これにはまだいくつかの問題があります。 私はquerybuilderを使用しています - 私の構文は以下のようになります。 ( 'AppBundle \ Entity \ EntityB'、 'AppBundle \ Entity \ EntityA'、 'a') '$ results = $ qb-> select(' a '、b) - > from(' AppBundle \ Entity \ EntityA '、' a ') - > innerJoin 'b'、 'WITH'、 'a.field1 = b.field2') ' これは、上記で説明したfetch-joinの方法で処理されています。これを変更して通常の結合を強制することができます結合されたエンティティをその行の子として持つエンティティごとに、 –

関連する問題