Ergebnisse mit der FIELD-Funktion von MySQL in Doktrin 2 ordnen
Beim Versuch, die FIELD-Funktion von MySQL in eine orderBy-Klausel zu integrieren, sind Sie bei Doktrin 2 auf eine mögliche Einschränkung gestoßen.
Angenommen, es stimmt, dass Doctrine 2 die FIELD-Funktion nicht nativ unterstützt, haben Sie mehrere Möglichkeiten, sie zu verwenden:
-
Abfrageänderung: Konvertieren Sie die Abfrage in eine native Abfrage umwandeln, die Ihnen mehr Kontrolle über die reine SQL-Syntax gibt und es Ihnen ermöglicht, die FIELD-Funktion direkt zu verwenden.
-
Erweiterungsimplementierung:Verwenden Sie Doctrine 2-Erweiterungen, die die Funktionalität erweitern, z wie das von Jeremy Hicks angebotene. Dazu müssen Sie die Erweiterung innerhalb Ihrer Doctrine-Konfiguration konfigurieren und eine benutzerdefinierte Zeichenfolgenfunktion verwenden, um auf die FIELD-Funktion zuzugreifen. Zum Beispiel $doctrineConfig->addCustomStringFunction('FIELD', 'DoctrineExtensionsQueryMysqlField').
-
Benutzerdefinierte Funktion: Erstellen Sie eine benutzerdefinierte Funktion, die das Verhalten der FIELD-Funktion emuliert, und integrieren Sie sie in Ihre Doktrin-Anfrage. Dies erfordert die Implementierung einer benutzerdefinierten DQL-Funktion und die Definition ihrer SQL-Implementierung.
Spezifische Lösung:
Um die FIELD-Funktion in eine orderBy-Klausel zu integrieren, während nach einer gefiltert wird Im Ausdruck wird der folgende Ansatz vorgeschlagen:
- Verwenden Sie die SELECT-Klausel, um ein verstecktes Feld hinzuzufügen, das die FIELD-Funktion enthält: select("r, field(r.id, " . implode(", „, $ids). verstecktes Feld: orderBy("field").
- Durch Hinzufügen des Schlüsselworts HIDDEN in der SELECT-Klausel können Sie vermeiden, dass der Feldalias in die Ergebniszeile aufgenommen wird.
-
Das obige ist der detaillierte Inhalt vonWie kann ich die FIELD-Funktion von MySQL in der Order By-Klausel von Doctrine 2 verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!