教义:在找一个中用



我想使用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){
...
}

这将创建一个包含单个元素的数组,以防对单个作业发出请求,并且对多个作业的请求将返回所有匹配的作业。

相关内容

  • 没有找到相关文章

最新更新