Comment écrire l'UNION dans la Doctrine 2.0
Comment écrire la requête SQL dans la Doctrine 2.0 (et récupère les résultats)?
(SELECT 'group' AS type, CONCAT(u.firstname, " ", u.surname) as fullname, g.name AS subject, user_id, who_id, group_id AS subject_id, created FROM group_notification JOIN users u ON(who_id = u.id) JOIN groups g ON(group_id = g.id))
UNION
(SELECT 'event' AS type, CONCAT(u.firstname, " ", u.surname) as fullname, e.name AS subject, user_id, who_id, event_id AS subject_id, created FROM event_notification JOIN users u ON(who_id = u.id) JOIN events e ON(event_id = e.id))
ORDER BY created
OriginalL'auteur Iškuda | 2010-11-11
Vous devez vous connecter pour publier un commentaire.
Bien, j'ai trouvé peut-être la meilleure solution:
Puis deux classes (NotificationGroup et NotificationEvent), l'extension de Notification:
vous sélectionnez à partir de la classe de base du référentiel (
Notification
) et vous obtenez tous les objets qui sont de la sous-classe du type (NotificationGroup
,NotificationEvent
, et même justeNotification
si vous n'avez pas déclaré à l'abstrait). Si vous avez besoin seulement certains types, alors vous pouvez utiliser leINSTANCE OF
opérateur OÙ.OriginalL'auteur Iškuda
De l'UNION n'est pas pris en charge dans DQL, mais vous pouvez toujours écrire une requête UNION et d'utiliser le Natif capacités de Requête pour récupérer les données:
http://doctrine-orm.readthedocs.org/en/latest/reference/native-sql.html
Cependant à partir de votre exemple, il semble que vous souhaitez utiliser une certaine forme de tableau par l'héritage de classe,
ce qui n'est pas encore pris en charge. Il existe une autre forme d'héritage, (Rejoint l'Héritage de Table) qui fonctionne bien, si vous pouvez changer votre schéma.
http://www.doctrine-project.org/projects/orm/2.0/docs/reference/inheritance-mapping/en#class-table-inheritance
Une vue serait une autre bonne solution, mais ensuite, cela dépend de votre fournisseur de base de données si elle prend également en charge les opérations d'écriture ou non.
OriginalL'auteur beberlei
OriginalL'auteur Milan Vidovic
UNION
n'est pas pris en charge dans la Doctrine, de la s. la discussion ici.Comme un interm solution, vous pouvez utiliser une VUE d'obtenir un soutien de l'UNION.
Est-il rien qui prend en charge la Doctrine? C'est incroyable.
OriginalL'auteur Haim Evgi