说我有多个工作和用户
Assignment:
columns:
job_id:
....
user_id:
....
relations:
user:
local: user_id
foreign: id
job:
local: job_id
foreign: id
是否可以查询Job然后加入job.assignment,以便结果返回所有作业,然后还为每个job.assignment返回其他行?
答案 0 :(得分:2)
Doctrine,当使用默认的Record水合时,将对象和关系返回给其他对象。在此模式下,您可以编写大量查询以获取所需内容,具体取决于您将要执行的操作。要获取作业列表,并获取所有相关的作业和用户,请使用:
$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
}
}
在这种情况下,您需要从用户到分配的关系。
如果您正在寻找,那么您甚至可以从作业开始:
$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
}
第一个查询将为您提供所有工作,即使是没有工作的工作。第二个是所有用户,也是没有任务的用户。第三项是分配,如果需要,将有用户和工作。