Fonction MySQL FIELD de Doctrine 2 dans l'ordre par
Lors de la tentative d'utilisation de la fonction SQL FIELD dans la clause order by d'une requête Doctrine 2 , on peut rencontrer des limitations en raison de son manque inhérent de prise en charge de cette fonction.
Existe-t-il une extension Doctrine 2 pour FIELD ?
Heureusement, il existe une Doctrine 2 extension développée par Jeremy Hicks qui ajoute la fonctionnalité FIELD. Pour intégrer cette extension, suivez les étapes ci-dessous :
Installez l'extension à l'aide de Composer :
composer require doctrine-extensions/doctrine-extensions
Ajoutez l'extension à la configuration Doctrine :
<code class="php">$doctrineConfig = $em->getConfiguration(); $doctrineConfig->addCustomStringFunction('FIELD', 'DoctrineExtensions\Query\Mysql\Field');</code>
Limitation : Restrictions de l'ordre des champs par clause
Malgré l'activation de la fonctionnalité FIELD via l'extension, il reste une limitation dans Doctrine 2 . La fonction FIELD ne peut pas être utilisée directement dans la clause order by.
Solution : Utiliser un alias CACHÉ
Pour contourner cette restriction, vous pouvez utiliser un alias de champ CACHÉ. dans votre requête :
<code class="php">$qb ->select("r, FIELD(r.id, " . implode(", ", $ids) . ") as HIDDEN field") ->from("Entities\Round", "r") ->where($qb->expr()->in("r.id", $ids)) ->orderBy("field");</code>
Explication :
Cette solution de contournement vous permet d'ordonner les valeurs dans une expression IN dans Doctrine 2.2, même avec les limitations imposées sur la fonction FIELD dans la clause order by.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!