Domanda

Ho tre tabelle:

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

Quello che vorrei fare è scrivere una dichiarazione DQL per restituire i progetti che un utente è associato. Sto cercando di emulare il seguente:

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

Leggere attentamente le istruzioni Dottrina mi si avvicinò con la seguente (u * è in là, perché si sono lamentati per la u non viene utilizzato nell'istruzione SELECT.):

$q = Doctrine_Query::create()
  ->from('Model_User u')
  ->select('u.*, p.*')
  ->leftJoin('u.Projects p');
$result = $q->execute();

Che restituisce anche se è un set di dati contenente un oggetto Model_User singolo con una proprietà 'progetti' riempito con i progetti associati. Mi piacerebbe avere solo i progetti restituiti, se possibile, ma io non riesco a capirlo. E 'possibile?

È stato utile?

Soluzione

ho avuto i miei rapporti sbagliato. Ho dovuto fare quanto segue e sono stato in grado di avere automaticamente Dottrina costruire rapporti corretti, senza dover utilizzare DQL (Così ho potuto andare $ user-> UserProjects o $ Progetto-> 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top