我想使用99%的代码来执行两个查询。 访问 api.com/jobs 时,它将显示我的所有作业,但访问 api.com/jobs/65 只会显示整个作业。
我的改进是在foreach之前有一个if,以检测它是一个ID还是列出所有id。
我的代码如下所示:
$Repo = $entityManager->getRepository('AppModelsEntityJobs');
if ($param){
$jobs = $Repo->find($param);
} else{
$jobs = $Repo->findAll();
}
foreach ($jobs as $j_key=>$job){
...
}
问题是:findAll(( 做得很好,但我不能只用 find(( 输入 foreach;
有什么方法可以做我想做的事吗?
如果您必须使用这种方法(我宁愿将关注点分开(,请将结果放入数组中;
编辑
$Repo = $entityManager->getRepository('AppModelsEntityJobs');
if ($param){
$jobs[] = $Repo->find($param);
} else{
$jobs = $Repo->findAll();
}
foreach ($jobs as $j_key => $job){
// there is a risk that whats in $jobs might not be what you expect. So check.
if(!$job instanceOf Jobs::class) {
continue;
}
}
或者,使用findBy
,因为它将返回一个将迭代的集合对象。
$Repo->findBy(['column' => 'value']);
我建议使用不同的代码段来处理这两种情况,但如果您希望将它们放在一起:
$Repo = $entityManager->getRepository('AppModelsEntityJobs');
if ($param){
$jobs = array($Repo->find($param));
} else{
$jobs = $Repo->findAll();
}
foreach ($jobs as $j_key=>$job){
...
}
这将创建一个包含单个元素的数组,以防对单个作业发出请求,并且对多个作业的请求将返回所有匹配的作业。