DoctrineのQueryBuilder
methodを使ってQueryを作成する
$qbという変数に入れられることが多い
createQueryBuilder()
引数指定すると、それ以下の式でエイリアスとして使用できる
from()の第2引数指定するのと何が違うん #?? select()
select *的なことをしたければ、select()自体を呼ばなければいい
addSelect()
from()
where()
in関数を使うとき
->where($qb->expr()->in('u.id', $id_list))
andWhere()
whereをandで連結する時に使う
where(..).andWhere(..)
setParameter()
上記の条件内で:hogeと書いたところに、実変数を入れる感じ
setParameter('hoge', $hoge)とすれば、文字列内で:hogeでアクセスできる
これ使わずにtemplate literal使う、ってことはしないのか #?? setParameters()
複数回setParameter()を呼ぶのとだいたい同じ
しかし、setParameters()の方がアクセスが分かりづらい
$1とか$2で呼ぶことになる
だから複数回setParameter()したほうがいいのではないかなと思う
配列で指定する
innerJoin()
こんな感じに今見ているEntityのpropertyから別Entityを見ることが多い
code:php
->innerJoin('o.Hoge', 'h')
そうじゃなく、外部のEntityも指定することもできる
ただしWITHが必要
code:php
->innerJoin('Customize\Entity\Hoge', 'h', 'WITH', 'p.id = h.p_id')
leftJoin()
rightJoin()はないmrsekut.icon
主従を入れ替えてleftJoinを使う必要がある
ただ、そうするだけでは動かない場面もある..
whereでIS NULLしたい時に無理そうだった
orderBy()
addOrderBy()
getQuery()
Query objectを返す
getResult()
結果を返す
getSingleResult()
getResult()の1つの結果だけ返す版
結果がない、結果が1つより多い場合、errorになる
not null判定
where($qb->expr()->isNotNull('p.hoge'))
たぶんこっちが正式な書き方
whereはandWhereやorWhereだったりはするよmrsekut.icon
where('p.hoge IS NOT NULL')
これでもいい
わざわざ複雑なisNotNullを書かないといけない意義が不明
isNotNull()の中身を見に行っても同じことやってるだけだし
$qb->expr()内に色々定義されている
in
isNotNull
...
A Reposityoで、B Repositoryをfromで指定する
joinなどではなく。
普通にfrom()で指定すれば良い
code:A.php
$a = $this->createQueryBuilder('a')
->from('\Entity\B', 'b')
諦めて生のSQLを書く
code:php
function getAuthoritativeSportsRecords() {
$sql = "SELECT name, event_type
FROM vnn_sport";
$em = $this->getDoctrine()->getManager();
$stmt = $em->getConnection()->prepare($sql);
$stmt->execute();
return $stmt->fetchAll();
}
型がつくわけでもないのにここまでしてmethodで頑張る必要あるのか?mrsekut.icon