2011-06-13 67 views
1

說我有以下多對多使用作業和用戶學說1.2查詢加入多對多

Assignment: 
    columns: 
    job_id: 
     .... 
    user_id: 
     .... 
relations: 
    user: 
     local: user_id 
     foreign: id 
    job: 
     local: job_id 
     foreign: id 

是它可以查詢工作,然後加入job.assignment使得結果返回的所有作業,然後還會爲每個job.assignment返回附加行?

回答

2

原則,當使用默認的記錄水合作用時,返回對象和關係到其他對象。在這種模式下,您可以編寫大量查詢以獲得您想要的內容,具體取決於您將如何處理它們。找到工作的清單,並抓住所有的相關的作業和用戶的使用:

$jobs = Doctrine_Query::create() 
    ->from('Job j') 
    ->leftJoin('j.Assignments a') 
    ->innerJoin('a.user u') 
    ->execute(); 
foreach($jobs as $job) { 
    foreach($job->Assignments as $assignment) { 
    $user = $assignment->user; 
    // do something with $job and $user here 
    } 
} 

在這種情況下,你需要從工作添加關係分配。如果你想要做的相反,得到用戶的列表,並加入到他們的工作,使用方法:

$users = Doctrine_Query::create() 
    ->from('User u') 
    ->leftJoin('u.Assignments a') 
    ->innerJoin('a.job j') 
    ->execute(); 
foreach($users as $user) { 
    foreach($user->Assignments as $assignment) { 
    $job = $assignment->job; 
    // do something with $job and $user here 
    } 
} 

在這種情況下,你需要從用戶到分配的關係。

你甚至可以分配開始,如果這是你在找什麼:

$assignments = Doctrine_Query::create() 
    ->from('Assignment a') 
    ->innerJoin('a.user u') 
    ->innerJoin('a.job j') 
    ->execute(); 
foreach($assignments as $assignment) { 
    $user = $assignment->user; 
    $job = $assignment->job; 
    // do something with $job and $user here 
} 

第一個查詢會給你所有的工作,甚至是那些沒有分配。第二,所有用戶,也是沒有任務的用戶。第三,任務,如果需要的話,將有用戶和工作。