LoginSignup
1
1

More than 5 years have passed since last update.

ドク君とリンちゃんのDQLと仲良くなる方法【その2】

Last updated at Posted at 2015-11-28

ご挨拶

おっすオラ「ドク」、ワ・タ・シは「リン」で~~す!!
二人合わせてドクとリン!!(キメ)。。。。。。
本題いきますか。。W

今日は有用かどうかは別として、ちょっとしたTipsです。

resetDQLPartがありならgetDQLPartもあるだろう

そう!!あるんです。

getDQLPart

前回に引き続きまたもやこんなソースがあったとします

レポジトリのメソッド内
$qb = $this->createQueryBuilder('p');
$qb->innerJoin('p.ProductClasses', 'pc');
return $qb->groupBy('p');


またまた別のレポジトリのメソッド内
$qb = $this->createQueryBuilder('c');
$qb->where('status', :Status);
$qb->setParameter('Status', なにかの::定数);
return $qb->groupBy('p');

上記の様なバラバラに返却されてくるQueryBuilderを共通化しているメソッドでselect条件を書き換えてゴニョゴニョしたいって時に以下な感じとなります

共通メソッド内/なんとなくカウントがしてみたくなったケース
$select = $qb->getDQLPart('select')[0]->getPart[0];←ここ、セレクトカラム一件前提
$qb->select('count ('.$select.')');→セレクト上書き、$selectの中は文字列(o か c)
$total = $qb->getQuery()->getSingleScalarResult();

って感じで動的に、DQLを組み直す事ができちゃいます!
ただ取得されるのはselect->('ここに書いた文字列')なので、複数カラムや
alias、集計関数など仕様してる際は、美しくないけどもreplaceなぞで工夫してください。
一回var_dumpなどで取得値を確認しようね!

あとメソッド結果の直接添字は古いPHPさんが ふぁっ!?? ってなるので、
よい子のみんなは真似しないように!

あとなんか、イィっ!!ってネタがあったんですが、忘れたので別の機会に。。

補足

whereでもjoinでもなんでもいける感じです

おまけ

Doctrineの概要について以下の概要がステキすぎる件

この内容がDoctrineの概要をさらっと書いているのですがステキすぎます!!本当に秀逸です!!
みなさま一度ご覧ください

またもや無断リンクすんません。。

次回は「ツウィギーなアイツ!!【EC-CUBE3編】」の予定

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1