Symfony2でテーブルを連結する際、基本的にDoctrine2のリレーションを使用しますが、頻繁に連結する必要がない場合にはEntityの定義が面倒になります。
そこで、createQueryBuilder関数を使って、手っ取り早くleft joinでテーブルを連結する方法をメモします。(すぐ忘れるので…)
$em = $this->getDoctrine()->getEntityManager();
$result = $em->getRepository('AppBundle:Blog')
->createQueryBuilder('b')
->select('b')
->leftJoin('AppBundle:Comment', 'c', 'WITH', 'b.id = c.blogId')
->where('b.title = :title')
->andWhere('c.userName = :userName')
->setParameters(['title' => $title, 'userName' => $userName])
->getQuery()
->getResult();
連結するカラムの指定
連結カラム(リレーションのJoinColumn)の書き方がわからなかった。->from
に書いてみたりしたけど上手く動作しませんでした。
結局、leftJoinで”WITH“を使いました。
$result = $em->getRepository('<親テーブル>')
->createQueryBuilder('<親エイリアス>')
->leftJoin('<子テーブル>', '<子エイリアス>', 'WITH', '<親エイリアス>.<親連結カラム> = <子エイリアス>.<子連結カラム>')
パラメータを渡す
あと、1つと複数では値をセットする際の関数が異なります。
1つの場合
->setParameter('key', $value)
複数の場合
->setParameters(['key1' => $value1, 'key2' => $value2, 'key3' => $value3])
検索はGoogle先生に頼ります。
- Original:https://minory.org/symfony2-left-join.html
- Source:Minory
- Author:管理者