私はFormTypeをEntityに使用し、設定しています エンティティフィールド 。 Where
には2つのAnd
句が必要です。これまでに読んだことから クエリビルダーページ で、少なくともこれをどのようにすればよいでしょうか。
_'query_builder' => function ($er){
$qb = $er->createQueryBuilder('p');
$qb
->where($qb->expr()->andx(
$qb->expr()->in('p', '?1'),
$qb->expr()->not(
$qb->expr()->eq('p.location', 'NULL')
)
))
->setParameter(1, $this->totalScope)
;
return $qb;
},
_
ただし、not(eq('col', 'NULL'))
では目的の結果が得られず、実際には次のエラーが発生します。
エラー:リテラルが期待され、「NULL」になりました
isNotNull
を使用できます。
'query_builder' => function ($er){
$qb = $er->createQueryBuilder('p');
$qb
->where($qb->expr()->andx(
$qb->expr()->in('p', '?1'),
$qb->expr()->isNotNull('p.location')
))
->setParameter(1, $this->totalScope);
return $qb;
},
QueryBuilderでDQLを使用することもできます。これは、はるかに少ないgly IMOです。
コントローラーからの迅速で汚い例:
$repo = $this->getDoctrine()->getRepository('AcmeBundle:Transaction');
$query = $repo->createQueryBuilder('t')
->where('t.timestamp > :timestamp')
->andWhere('t.pinNumber IS NOT NULL')
->setParameter('timestamp', new \DateTime('1 day ago'))
->getQuery()
;
私の見積もりで読みやすくなりました。