Mysql
 sql >> Base de données >  >> RDS >> Mysql

Doctrine 2 mysql FIELD fonction dans l'ordre par

Jeremy Hicks, merci pour votre extension .Je ne savais pas comment relier votre fonction à la doctrine, mais finalement j'ai trouvé la réponse.

$doctrineConfig = $this->em->getConfiguration();
$doctrineConfig->addCustomStringFunction('FIELD', 'DoctrineExtensions\Query\Mysql\Field');

J'ai besoin de FIELD fonction pour ordonner mes entités que je sélectionne par IN expression. Mais vous ne pouvez utiliser cette fonction que dans SELECT, WHERE, BETWEEN clause, pas dans ORDER BY .

Solution :

$qb
            ->select("r, field(r.id, " . implode(", ", $ids) . ") as HIDDEN field")
            ->from("Entities\Round", "r")
            ->where($qb->expr()->in("r.id", $ids))
            ->orderBy("field");

Pour éviter d'ajouter un field alias dans votre ligne de résultat, vous devez mettre HIDDEN mot-clé. Donc, voici comment pouvoir commander des valeurs dans IN expression dans Doctrine 2.2.