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?

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top