Doctrine 2 MySQL FIELD-Funktion in Order By
Beim Versuch, die SQL FIELD-Funktion in der Order by-Klausel einer Doctrine 2-Abfrage zu verwenden , kann es aufgrund der inhärenten mangelnden Unterstützung dieser Funktion zu Einschränkungen kommen.
Gibt es eine Doctrine 2-Erweiterung für FIELD?
Glücklicherweise gibt es eine Doctrine 2 Von Jeremy Hicks entwickelte Erweiterung, die FIELD-Funktionalität hinzufügt. Um diese Erweiterung zu integrieren, führen Sie die folgenden Schritte aus:
Installieren Sie die Erweiterung mit Composer:
composer require doctrine-extensions/doctrine-extensions
Fügen Sie die Erweiterung zur Doctrine-Konfiguration hinzu :
<code class="php">$doctrineConfig = $em->getConfiguration(); $doctrineConfig->addCustomStringFunction('FIELD', 'DoctrineExtensions\Query\Mysql\Field');</code>
Einschränkung: FIELD Order By Clause Einschränkungen
Obwohl die FIELD-Funktionalität durch die Erweiterung aktiviert wird, bleibt eine Einschränkung in Doctrine 2 bestehen . Die FIELD-Funktion kann nicht direkt in der Order-By-Klausel verwendet werden.
Lösung: Verwendung eines HIDDEN-Alias
Um diese Einschränkung zu umgehen, können Sie einen HIDDEN-Feldalias verwenden in Ihrer Abfrage:
<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>
Erklärung:
Diese Problemumgehung ermöglicht es Ihnen, Werte innerhalb eines IN-Ausdrucks in Doctrine 2.2 zu ordnen, auch mit den auferlegten Einschränkungen die FIELD-Funktion in der order by-Klausel.
Das obige ist der detaillierte Inhalt vonWie kann ich die MySQL FIELD-Funktion mit der ORDER BY-Klausel von Doctrine 2 verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!