Obtener la Doctrina relaciones en DQL
-
30-09-2019 - |
Pregunta
Tengo tres tablas:
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
Lo que me gustaría hacer es escribir una declaración DQL para devolver los proyectos que un usuario está asociado a. Estoy tratando de emular el siguiente:
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
Lectura a través de las instrucciones de Doctrina me ocurrió la siguiente (u * está ahí porque se quejó de u no se utiliza en la instrucción SELECT.):
$q = Doctrine_Query::create()
->from('Model_User u')
->select('u.*, p.*')
->leftJoin('u.Projects p');
$result = $q->execute();
Lo que vuelve sin embargo, es un conjunto de datos que contiene un solo objeto Model_User con una propiedad 'Proyectos' rellenado con los proyectos asociados. Me gustaría tener sólo los proyectos devueltos si es posible, pero me parece que no puede darse cuenta de eso. ¿Es posible?
Solución
Yo tenía mis relaciones equivocado. Tenía que hacer lo siguiente y yo era capaz de tener Doctrina construir relaciones correctas automáticamente sin tener que utilizar DQL (para que pudiera ir $ usuario-> UserProjects o $ Proyecto-> 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