当使用默认的 Record hydration 时,Doctrine 返回对象和与其他对象的关系。在这种模式下,您可以编写许多查询来获得所需的内容,具体取决于您要对它们执行的操作。要获取作业列表,并获取所有相关的作业和用户,请使用:
$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
}
}
在这种情况下,您需要添加从 Job 到 Assignment 的关系。如果您想反过来,获取用户列表并加入他们的工作,请使用:
$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
}
}
在这种情况下,您需要从 User 到 Assignment 的关系。
您甚至可以从作业开始,如果这是您正在寻找的:
$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
}
第一个查询将为您提供所有工作,即使是没有分配的工作。第二,所有用户,也包括没有分配的用户。第三,分配,如果需要,将有用户和作业。