Ottenere Dottrina relazioni in DQL
-
30-09-2019 - |
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?
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