Doctrine 2 DQL CONCAT champs et les chaines
J'ai le champs firstname
et lastname
dans ma table MySQL. Pour plus de commodité, je veux ajouter une colonne calculée à ma Doctrine 2 entité appelée full_name
. Dans la plaine de MySQL, je voudrais faire quelque chose comme ceci
SELECT CONCAT(firstname, " ", lastname) AS full_name FROM customers;
Cependant, la concaténation de champs et les constantes chaînes de caractères (" " dans ce cas) semble ne pas fonctionner avec la Doctrine de la mise en œuvre de CONCAT. Lorsque vous utilisez le code suivant
$repository
->createQueryBuilder('customer')
->select('CONCAT(customer.firstname, " ", customer.lastname) AS full_name')
// ...
Je reçois le message d'erreur
[Syntax Error] line 0, col 91: Error: Expected StateFieldPathExpression | string | InputParameter | FunctionsReturningStrings | AggregateExpression, got '"'
Comment puis-je obtenir le même comportement que dans MySQL?
OriginalL'auteur Subsurf | 2016-01-12
Vous devez vous connecter pour publier un commentaire.
Apparemment, les chaînes en DQL ne peut être encapsulé par des guillemets simples, pas de guillemets doubles. Une brève recherche dans la documentation n'est pas une citation directe de ce comportement, mais j'ai remarqué que tous les exemples qui inclus les chaines utilisé des guillemets simples.
Changer
à
ou
résolu le problème
Malheureusement, depuis que j'ai posé cette question, le code contenant mon problème initial a été supprimé de notre base de code, donc je ne peux pas donner un exemple en ce moment. Il doit y avoir une autre erreur dans votre requête.
Pour mémoire, il n'est pas étonnant parce que la même chose est également vrai pour SQL en général. Voir: stackoverflow.com/questions/1992314/...
C'est bon à savoir, je suis la plupart du temps travailler avec MySQL qui permet de guillemets pour les cordes, je n'ai donc jamais su que c'était pas de la partie officielle de la SQL
OriginalL'auteur Subsurf
solution que j'utilise dans la Doctrine de 2,4+:
donc $nom[$k] est un tableau de champs, autant que vous le souhaitez. Je puis ajouter un peu d'espacement entre les champs avec le str_replace. $k est le nom de la méthode concat champ, de sorte que le résultat de $concat est
Espère que cela aide quelqu'un. Sur la base de données MySQL PDO Plate-forme.
Craig
OriginalL'auteur Craig Rayner
Cela fonctionne pour moi:
OriginalL'auteur pino