Doctrine – COUNT s multiple where podmínkou

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Dan Hundrt
Člen | 74
+
0
-

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
+
0
-

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
+
0
-

@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