Symfony2でテーブルを連結する際、基本的にDoctrine2のリレーションを使用しますが、頻繁に連結する必要がない場合にはEntityの定義が面倒になります。
そこで、createQueryBuilder関数を使って、手っ取り早くleft joinでテーブルを連結する方法をメモします。(すぐ忘れるので…)
1 2 3 4 5 6 7 8 9 10 |
$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“を使いました。
1 2 3 |
$result = $em->getRepository('<親テーブル>') ->createQueryBuilder('<親エイリアス>') ->leftJoin('<子テーブル>', '<子エイリアス>', 'WITH', '<親エイリアス>.<親連結カラム> = <子エイリアス>.<子連結カラム>') |
パラメータを渡す
あと、1つと複数では値をセットする際の関数が異なります。
1つの場合
1 |
->setParameter('key', $value) |
複数の場合
1 |
->setParameters(['key1' => $value1, 'key2' => $value2, 'key3' => $value3]) |
検索はGoogle先生に頼ります。
Doctrine QueryBuilder の join の書き方めも(WITHなし・あり) – Tomcky’s blog
product テーブル id category_id name category テーブル id name createQueryBuilder() ->select(‘p’) ->from(‘AppBundle:Product’, ‘p’) ->join(‘p.ca…
コメント