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?

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top