DQL LEFT JOIN - sql exemple
bon fonctionnement de SQL est:
SELECT ro.id_role
,rr.id_role_resource
,re.id_resource
FROM resource re
LEFT JOIN role_resource rr
ON rr.resource_id = re.id_resource
LEFT JOIN role ro
ON ro.id_role = rr.role_id
maintenant je dois écrire DQL-
c'est le tableau shema:
rôle: id_role, name
role_resource: id_role_resource, role_id, resource_id, permission
ressource: id_resource, controller,action ...
dans le dernier tableau sont pas d'enregistrements correspondants dans la table role_resource.
C'est pourquoi j'ai besoin de cette gauche de la Requête de Jointure en DQL.
- Ce que les annotations sont vous aide pour la cartographie de ce schéma entités?
- Eh bien, qu'avez-vous obtenu jusqu'à présent, et pourquoi n'est-il pas de travail? Notez que, plutôt que de chaînage
LEFT JOIN
s de vanille dans SQL (qui peut faire le raisonnement sur les lignes renvoyées intéressant dans certaines requêtes) j'ai tendance à préférerLEFT JOIN (a JOIN b ON ...) ON ...
Vous devez vous connecter pour publier un commentaire.
Normalement, si vous avez une
Resource
entité avec un$roles
de propriété et le bon annotations (OneToMany
,ManyToMany
) puis votre table de jointure (role_resource
) n'aurait pas besoin auto_increment id de sa propre.C'est parce que la Doctrine des poignées d'informations sur l'association et sait quand une table de jointure est nécessaire à leur base. La Doctrine sait aussi que les conditions d'utilisation lors de l'adhésion des deux entités, selon les mêmes informations sur l'association.
Donc, si une requête SQL serait de joindre deux tables par l'intermédiaire d'un tableau à l'aide de 2 clauses join, une requête DQL aurait seulement besoin d'être dit que l'association nom et il aurait tous "de la table de jointure" & "les conditions de jointure" de l'information disponible.
Ainsi, une simple requête devrait ressembler à:
Équivalent queryBuilder syntaxe:
Mais
JOIN
par défaut unINNER JOIN
c'est pourquoi nous voulons résoudre ce par une réécriture de la requête comme suit:Équivalent queryBuilder syntaxe:
Si toutefois vous voulez la
role_resource
table pour avoir une id auto_increment de ses propres et accessibles dans la Doctrine des requêtes, puis Doctrine a besoin de savoir à propos de la table -- il doit être mappé à une entité distincte et vous avez besoin de explicitate le fait que vous êtes en unissant des Ressources, RoleResources et des Rôles.