Qualcuno sa come recuperare un conteggio in base a una condizione in una istruzione select() di QueryBuilder Doctrine 2?Doctrine 2: conta elementi per tipo in Seleziona
Ecco quello che ho provato finora ...
Il mio primo tentativo è stato quello di provare count() con eq(). L'errore che ricevo dice "Sono previste parentesi chiuse, uguali."
$qb->select($qb->expr()->count($qb->expr()->eq('t.id', '1')))
Successivamente ho provato count() con avere(). L'errore che ricevo dice "Raggiunto il livello massimo di nidificazione delle funzioni."
$qb->select($qb->expr()->count($qb->having('t.id', '1')))
Quindi ho provato count() con where() ed eq(). Ancora una volta ho ottenuto "Massimo livello di nidificazione della funzione raggiunto".
$qb->select($qb->expr()->count($qb->where($qb->expr()->eq('t.id', '1'))))
Quindi ho provato queste variazioni utilizzando in(). Entrambi danno l'errore di sintassi "ci si aspetta da, ottenuto '('
$qb->select($qb->expr()->count($qb->expr()->in('t.id', array(1))))
$qb->select($qb->expr()->count($qb->expr()->in('t.id', 1)))
Per l'in() esempi, ho provato anche passando il valore come una variabile e tramite setParameter(), con lo stesso risultato.
Qui è l'equivalente di MySQL di quello che sto cercando di codice QueryBuilder:
SELECT
SUM(IF(type.id = 1, 1, 0)) AS 'fords',
SUM(IF(type.id = 2, 1, 0)) AS 'hondas'
FROM item
JOIN type ON item.type_id = type.id
Non dimenticate, che è possibile utilizzare Query native. A volte è più veloce e più elegante. –