Doctrine – COUNT s multiple where podmínkou
- Dan Hundrt
- Člen | 74
Zdravím,
používám Kdyby/Doctrine, mám metodu:
public function getArticleCountAll()
{
return $this->em->getRepository(Articles::class)
->createQueryBuilder('a')
->select('COUNT(a.id)')
->where('a.trash = 0', 'a.lang = cs')
->getQuery()
->getSingleScalarResult();
}
která mi vytáhne počet nesmazaných článků s ohledem na jazyk. SQL z toho vyleze následující:
SELECT COUNT(a.id)
FROM App\Articles a
WHERE a.trash = 0 AND a.lang = cs
ale chcípne na chybě:
Doctrine\ORM\Query\QueryException
[Semantical Error] line 0, col 70 near 'cs': Error: 'cs' is not defined.
Nevíte, kde je problém? Sloupec lang existuje, je to varchar, jiné, články jsou buď en nebo cs.
- Matey
- Člen | 142
Po správnosti by to malo byť zadané cez parametre, prípadne by asi stačilo hodiť cs do úvodzoviek. Ale takto je to lepšie.
public function getArticleCountAll()
{
return $this->em->getRepository(Articles::class)
->createQueryBuilder('a')
->select('COUNT(a.id)')
->where('a.trash = :trash', 'a.lang = :lang')
->getQuery()
->setParameters([
'trash' => 0,
'lang' => 'cs'
])
->getSingleScalarResult();
}
- Dan Hundrt
- Člen | 74
@Matey – děkuji mnohokrát.
Ještě bych se chtěl zeptat, zda lze už při výběru z tabulky defaulně podmínkovat. Praktický příklad: mám 3 metody, ve kterých vybírám data článků (pro detail, výpis, součet,…), ve všech prakticky potřebuji stejnou podmínku (trash = 0, public = 1), lze např. zvolit defaultní where v anotacích u entit? Cílem je, abych nemusel dokola psát podmínky a jen je ev. přětěžoval.
Díky moc