2010-06-26 32 views
0

我有三個表:獲取主義的關係在DQL

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 

我希望做的是寫一個DQL語句返回該用戶相關聯的項目。我試圖仿效以下幾點:

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 

通過主義指導閱讀,我想出了以下(U *是在那裏,因爲它抱怨ü沒有在SELECT語句中使用。):

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

它返回的是一個包含單個Model_User對象的數據集,該對象的'Projects'屬性填充了關聯的項目。如果可能的話,我只想讓項目返回,但我似乎無法弄清楚。可能嗎?

回答

0

我的關係錯了。我不得不做下面的事情,我可以讓Doctrine自動建立正確的關係,而不必使用DQL(所以我可以去$ user-> UserProjects或$ project-> 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