Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 信条:使用foreach查找一个_Php_Doctrine Orm - Fatal编程技术网

Php 信条:使用foreach查找一个

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

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