ご挨拶
おっすオラ「ドク」、ワ・タ・シは「リン」で~~す!!
二人合わせてドクとリン!!(キメ)。。。。。。
本題いきますか。。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編】」の予定