2012-01-07 9 views
1

でクエリを(私はタイトルをより明確にするかどうかはわかりません - それを編集して自由に感じる)の簡素化Symfony2の

私はワインワイナリーを持つ2つのテーブルを持っています。すべてのワインには1つのワイナリーが割り当てられています。
私は、対応するワイナリーを持つすべてのワインのリストを生成したい場合は、私はこれを行うことができます。

$entities = $em->getRepository('MyBundle:Wine')->findAll(); 

{% for entity in entities %} 
    {{ entity.winery.name }} {{ entity.name }} <br /> 
{% endfor %} 

この解決策で問題が作られた余分なクエリが存在することです私が避けたいワイナリーごとに

私は​​で使用されている技術を試しましたが、動作させることができませんでした(単一の結果だけで動作しますか?)。

通常はSQLで、私は単にLEFT JOINを実行しますが、Doctrine2でそれを達成する方法を理解できません。

$qb = $this->createQueryBuilder('w', 'wnr'); 
$qb->leftJoin('w.winery', 'wnr'); 
$qb->orderBy('w.name', 'ASC'); 

$qb->getQuery()->getResult(); 

???

ご協力いただきありがとうございます。

+0

SQL、DQL、独自のメソッド。あなたがリンクしているマニュアルページにリストされています。 – hakre

+0

@hakre:どうすれば後でアクセスできますか?私がそのように結合したままにすると、結合プロパティにアクセスすることができません。 – Czechnology

+0

これは達成しようとするものによって異なります。 ORMを使用しているので、通常はSQLを使用したくありません。ですから、SQLを別にして、DQLで問題を解決できるかどうかを見てください。 DQLはオブジェクトを返します。 – hakre

答えて

3

DQLクエリでWineryを選択しましたか?

$entities = $em->getRepository('MyBundle:Wine') 
    ->createQueryBuilder('w') 
    ->select('w, wnr') 
    ->leftJoin('w.winery', 'wnr'); 
    ->getQuery() 
    ->getResult(); 
+0

私はまだ同じ問題を抱えています - どうすれば後でそれにアクセスできますか?なぜなら、ワインのプロパティwnrにアクセスしようとすると、symfonyはそのようなメソッドがないと不平を言うからです。それはかなり理解できますが、エンティティ自体を変更する必要があるのでしょうか? – Czechnology

+0

@Czechnology:そのプロパティにゲッターメソッドを使用しないでください。 – hakre

+0

さて、私はついにそれを得て、多かれ少なかれそれを理解したと思います。私の脳はまだSQLとDQLの中間にちょっと残っています。私がtwig(通常のgetterメソッド)で通常の 'winery'プロパティを使うと、ただ一つのクエリでうまく動作します。ご協力いただきありがとうございます! – Czechnology