Lehre 2 DQL CONCAT Felder und Konstanten strings
Habe ich die Felder firstname
und lastname
in meiner MySQL-Tabelle. Für die Bequemlichkeit möchte ich noch hinzufügen einer berechneten Spalte zu meiner Lehre, 2 Entität namens full_name
. In plain old MySQL würde ich so etwas tun
SELECT CONCAT(firstname, " ", lastname) AS full_name FROM customers;
Jedoch verketten von Feldern und Konstanten strings (" " in diesem Fall) scheint nicht zu funktionieren mit der Lehre, die Umsetzung von CONCAT. Bei Verwendung des folgenden code
$repository
->createQueryBuilder('customer')
->select('CONCAT(customer.firstname, " ", customer.lastname) AS full_name')
// ...
Bekomme ich die Fehlermeldung
[Syntax Error] line 0, col 91: Error: Expected StateFieldPathExpression | string | InputParameter | FunctionsReturningStrings | AggregateExpression, got '"'
Wie kann ich erreichen das gleiche Verhalten wie in MySQL?
InformationsquelleAutor Subsurf | 2016-01-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Offenbar strings in DQL kann nur gekapselt werden durch einfache Anführungszeichen, keine doppelten Anführungszeichen. Eine kurze Suche in der Dokumentation nicht auftauchen, eine direkte Erwähnung dieses Verhalten, aber ich habe bemerkt, dass alle Beispiele, die im Lieferumfang enthalten Konstante Zeichenketten verwendet einfache Anführungszeichen.
Ändern
zu
oder
löste das Problem
Leider, denn ich habe diese Frage gestellt, den code mit meinem ursprünglichen problem entfernt wurde, aus unserer codebase, so kann ich nicht geben, ein Beispiel jetzt. Es muss ein anderer Fehler in deinem query.
Für das Protokoll, dies ist überhaupt nicht überraschend, denn das gleiche gilt auch für SQL im Allgemeinen. Siehe: stackoverflow.com/questions/1992314/...
Das ist gut zu wissen, ich bin meistens die Arbeit mit MySQL, das kann doppelte Anführungszeichen für strings, so dass ich nie wusste, es war nicht Teil des offiziellen SQL
InformationsquelleAutor Subsurf
Lösung, die ich verwenden in der Lehre 2.4+:
also $name[$k] ist ein array von Feldern, so viele wie Sie möchten. Ich habe dann fügen Sie etwas Abstand zwischen den Feldern mit str_replace. $k ist der name der concat-Feld, so dass das Ergebnis von $concat ist
Hoffe, das jemand hilft. Auf MySQL-Datenbank mit PDO-Plattform.
Craig
InformationsquelleAutor Craig Rayner
Diese funktioniert bei mir:
InformationsquelleAutor pino