Php 信条:使用foreach查找一个
我想用99%的代码做两个查询。 当访问api.com/jobs时,它将显示我的所有作业,但访问api.com/jobs/65将只显示整个作业 我的改进是在foreach之前有一个if,以检测它是单个id还是列出所有id 我的代码如下所示:Php 信条:使用foreach查找一个,php,doctrine-orm,Php,Doctrine Orm,我想用99%的代码做两个查询。 当访问api.com/jobs时,它将显示我的所有作业,但访问api.com/jobs/65将只显示整个作业 我的改进是在foreach之前有一个if,以检测它是单个id还是列出所有id 我的代码如下所示: $Repo = $entityManager->getRepository('App\Models\Entity\Jobs'); if ($param){ $jobs = $Repo->find($param); } else{ $jobs
$Repo = $entityManager->getRepository('App\Models\Entity\Jobs');
if ($param){
$jobs = $Repo->find($param);
} else{
$jobs = $Repo->findAll();
}
foreach ($jobs as $j_key=>$job){
...
}
问题是:findAll()做得很好,但我不能只用find()进入foreach
有什么方法可以实现我想要的吗?如果必须使用这种方法(我更愿意将关注点分开),请将结果放入数组中 编辑 或者,使用
findBy
作为itll返回将迭代的集合对象
$Repo->findBy(['column' => 'value']);
我建议使用不同的代码段来处理这两种情况,但如果您希望将它们放在一起:
$Repo = $entityManager->getRepository('App\Models\Entity\Jobs');
if ($param){
$jobs = array($Repo->find($param));
} else{
$jobs = $Repo->findAll();
}
foreach ($jobs as $j_key=>$job){
...
}
这将创建一个包含单个元素的数组,以防对单个作业发出请求,而对多个作业的请求将返回所有匹配的作业。这不起作用:在foreach I do内:echo$job->getName();这将返回一个错误:错误:调用integer上的成员函数getName()。这将尝试将实体转换为数组,这将导致每个属性都是数组键。您将无法再使用原始对象上存在的任何方法。这是可行的,而且我尝试测试代码段的实例,但给出了一个错误。那到底是干什么用的<代码>分析错误:语法错误、意外的“类”(T_类)、预期的变量(T_变量)或“$”使用
instanceOf
将检查变量是否包含该类型的类。在假设可以调用该类的方法以确保其能够执行该操作之前,您可以使用它。。您使用的是哪一种?非常感谢,这很有效,但我更喜欢@DevDonkey建议,即:$jobs[]=$Repo->find($param)代码>在这种情况下,在尝试为空数组分配元素之前,最好先初始化它。例如,$jobs=array()
。请参阅PHP文档中的注释:
$Repo = $entityManager->getRepository('App\Models\Entity\Jobs');
if ($param){
$jobs = array($Repo->find($param));
} else{
$jobs = $Repo->findAll();
}
foreach ($jobs as $j_key=>$job){
...
}