CASTING attributs pour Commander sur un Doctrine2 Requête DQL
J'essaie d'obtenir Doctrine2 Entités, commandés par leur ID, ce qui apparemment est une Chaîne de caractères, même si elle ne contient que des Chiffres.
Donc ce que je voudrais faire est quelque chose comme ceci:
SELECT entity1, cast (entity1.id AS integer) AS orderId
FROM Namespace\Bla\MyEntity
ORDER BY orderId
Est-il un moyen de faire quelque chose comme cela dans Doctrine2?
Ou, ce qui serait la meilleure pratique pour obtenir mon Résultat si je ne peux pas changer le type de l'id (en raison des exigences de la clientèle des cours)?
Attention: je ne demande pas de Code SQL, je demande un Doctrine2 Solution, de préférence en DQL
Je pense que vous êtes absent une
(
à la ligne 13.OriginalL'auteur Andresch Serj | 2011-09-13
Vous devez vous connecter pour publier un commentaire.
Vous devriez être en mesure de ajoutez votre propre fonction pour mettre en œuvre cette fonctionnalité.
La classe ressemblerait à quelque chose comme ceci:
Vous aurez besoin d'enregistrer votre fonction:
Alors vous pouvez l'utiliser:
PS: Par l'ajout de la
HIDDEN
mot-clé, l'aliasorderId
ne seront pas dans les résultats (et est seulement utilisé pour la commande).SingleValuedPathExpression
commeu.group
et que vous voulez "wrap" ce dans un"CAST(" SingleValuedPathExpression " AS DECIMAL(10,2))"
utilisant l'Expression réelle des objets... comment dois-je procéder? Ce genre d'Expression aurait COULÉ ... lors de sa construction fabriqués à la main?ok tant pis; j'ai utilisé une expression personnalisée et modifié sa
->dispatch()
méthode pour l'adapter à mes besoins. Nettoyant comme prévu. La Doctrine est génial. 🙂Si l'objectif de base de données est MySql, cette ligne ne fonctionne pas:
return 'CAST(' . $this->stringPrimary->dispatch($sqlWalker) . ' AS integer)'
; Essayez ceci:return 'CAST(' . $this->stringPrimary->dispatch($sqlWalker) . ' AS SIGNED)';
Juste pour l'enregistrement dans Symfony, vous mettez le registre de la partie config.yml
OriginalL'auteur Jasper N. Brouwer
Basé sur Jasper N. Brouwer réponse, c'est un peu améliorée de la solution:
Maintenant, il devrait en fait possible d'écrire des DQL comme ceci:
OriginalL'auteur Petr
Essayer celui-ci par avec la modification du type de données
OriginalL'auteur A4 Page
Je pense que vous voulez commander par
entity1
. si votre l'entité1 type de données integer alors pas besoin de le changer en entier ou si elle n'est pas, alors vous devriez le faire. ci-dessous est une requête pour vous.essayez celui-ci.Ensuite, vous avez la 2e option par l'affichage et le retour de la valeur..
OriginalL'auteur A4 Page
Ne sais pas si cela fonctionne, mais pour accéder à une entité ID vous avez besoin de l'IDENTITÉ() DQL fonction. Essayez ceci:
OriginalL'auteur derula
J'ai juste fait quelque chose de semblable dans mon propre code hier. J'ai pu faire:
Je devais vraiment de mine à ciel comme de l'argent et ensuite int, mais si vous n'avez pas un nombre décimal, vous ne devriez pas avoir ce problème. Vous pouvez également essayer de coulée du numérique ou de l'utilisation de convertir au lieu de plâtre, mais le plâtre est mieux dans cette situation.
Pourquoi avez-vous besoin de l'entité1 comme une colonne si vous avez déjà la même valeur dans n ° de commande?
Je n'étais pas au courant de cela et j'ai été en utilisant le sql pour sql server, pas de mysql, mais ils sont très similaires.
OriginalL'auteur rainhider