Symfony2のcreateQueryBuilder(Doctrine)でleft joinする【開発メモ】


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先生に頼ります。
symfony2 createquerybuilder left join – Google 検索

http://ift.tt/2By3CVa

コメント

このブログの人気の投稿

Linuxでファイルの改行コードLF⇔CRLFを変換する方法

RHEL 7でスタティック(静的)ルートを追加する4つの方法

UTF-8のBOM付きとBOMなしを変換する方法(Linux)