Dotaz, který se pokoušíte provést pomocí doktríny, souvisí s největší-n-na-skupinu . Chcete-li použít dílčí dotaz a poté se připojit k hlavnímu dotazu, zkomplikuje se manipulace s doktrínou. Níže je tedy přepsaná verze SQL pro získání stejných výsledků bez použití jakýchkoli agregačních funkcí:
SELECT
a.*
FROM
score a
LEFT JOIN score b
ON a.name = b.name
AND a.score < b.score
WHERE b.score IS NULL
ORDER BY a.score DESC
Převést výše uvedený dotaz ekvivalentní doktrínu nebo DQL je snadné, níže je verze DQL výše uvedeného SQL:
SELECT a
FROM AppBundle\Entity\Score a
LEFT JOIN AppBundle\Entity\Score b
WITH a.name = b.name
AND a.score < b.score
WHERE b.score IS NULL
ORDER BY a.score DESC
Nebo pomocí nástroje pro tvorbu dotazů můžete napsat něco, co jsem testoval níže se symfony 2.8 pomocí DEMO schéma
$DM = $this->get( 'Doctrine' )->getManager();
$repo = $DM->getRepository( 'AppBundle\Entity\Score' );
$results = $repo->createQueryBuilder( 'a' )
->select( 'a' )
->leftJoin(
'AppBundle\Entity\Score',
'b',
'WITH',
'a.name = b.name AND a.score < b.score'
)
->where( 'b.score IS NULL' )
->orderBy( 'a.score','DESC' )
->getQuery()
->getResult();
Dalším nápadem by bylo vytvořit pohled pomocí vašeho dotazu v databázi a v symfony vytvořit entitu, vložte název pohledu do anotace tabulky a začněte volat vaši entitu, poskytne výsledky vrácené vaším dotazem, ale tento přístup se nedoporučuje, pouze dočasná oprava .