Obtenez les relations Doctrine en DQL
-
30-09-2019 - |
Question
J'ai trois tableaux:
Project:
...
relations:
User:
local: authorId
foreign: id
Users:
class: User
local: projectId
foreign: userId
refClass: UserProjects
User:
...
relations:
Projects:
class: Project
local: userId
foreign: projectId
refClass: UserProjects
UserProjects:
columns:
id:
type: integer
primary: true
autoincrement: true
userId: integer
projectId: integer
Ce que je voudrais faire est d'écrire une déclaration DQL pour renvoyer les projets qui est associé à un utilisateur. Je suis en train d'imiter ce qui suit:
SELECT p.*
FROM user_projects AS up
LEFT JOIN project AS p ON up.projectid = p.id
LEFT JOIN user AS u ON up.userid = u.id
WHERE u.id = 1
En lisant les instructions Doctrine je suis venu avec ce qui suit (u * est là parce qu'il se plaignait de u ne sont pas utilisés dans l'instruction select.):
$q = Doctrine_Query::create()
->from('Model_User u')
->select('u.*, p.*')
->leftJoin('u.Projects p');
$result = $q->execute();
Qu'est-ce qu'il retourne bien est un ensemble de données contenant un seul objet Model_User avec une propriété « Projets » rempli avec les projets associés. Je voudrais avoir juste les projets de retour si possible, mais je ne peux pas sembler comprendre. Est-il possible?
La solution
J'ai eu mal mes relations. Je devais faire ce qui suit et je suis en mesure d'avoir la doctrine de construire automatiquement des relations correctes sans avoir à utiliser DQL (donc je pourrais aller $ user-> UserProjects ou $ Projet-> UserProjects)
Project:
columns:
id:
type: integer
primary: true
autoincrement: true
...
authorId: integer
...
relations:
User:
local: authorId
foreign: id
Users:
foreignAlias: Projects
class: User
refClass: UserProjects
User:
columns:
id:
type: integer
primary: true
autoincrement: true
...
UserProjects:
columns:
id:
type: integer
primary: true
autoincrement: true
user_id: integer
project_id: integer
relations:
Project:
foreignAlias: UserProjects
User:
foreignAlias: UserProjects