Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.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 symfony 3.3和3.4条令实体管理器到阵列的转换_Php_Arrays_Symfony_Doctrine - Fatal编程技术网

Php symfony 3.3和3.4条令实体管理器到阵列的转换

Php symfony 3.3和3.4条令实体管理器到阵列的转换,php,arrays,symfony,doctrine,Php,Arrays,Symfony,Doctrine,我有下面的控制器,它在symfony 3.3和3.4上给出了相同的问题,所有这些都使用PHP7。当我只从DB返回一个元素时,控制器工作。问题是当查询返回多个元素时。在这种情况下,它返回一个Symfony错误。这是控制器的操作: (...) public function checkLastReportAction(){ $em = $this->getDoctrine() ->getRepository('NCbrtBundle:NcBackupEve

我有下面的控制器,它在symfony 3.3和3.4上给出了相同的问题,所有这些都使用PHP7。当我只从DB返回一个元素时,控制器工作。问题是当查询返回多个元素时。在这种情况下,它返回一个Symfony错误。这是控制器的操作:

(...)
public function checkLastReportAction(){
    $em = $this->getDoctrine()
            ->getRepository('NCbrtBundle:NcBackupEvents')
            ->findServerByBackupReport();
    var_dump($em);
    $length = count($em);
    $TimeDifferenceAux = array();
    echo 'size: ' . $length . '<br>';
    for($i=0; $i <= $length-1; $i++){
        echo $i . '<br>';
        $format = 'Y-m-d H:i:s';
        $latest_date_str = $em[$i];
        $latest = date_create_from_format($format, $latest_date_str['latest']);
        (...)
        echo $TimeDifferenceAux . ' <-> ' . $em[$i]['frequency'] . '<br>';
        if ($TimeDifferenceAux > $em[$i]['frequency'] && 
                $em[$i]['frequency'] > 0 &&
                $em[$i]['frequency'] != ''){
            echo 'Report ' . $em[$i]['name'] . '<br>';

            $event = new NcBackupEvents();

            $event->setBackupmethod('BRT: No report');
            (...)
            $event->setSuccess('3');

            // Create the LOG
            $log = 'This server has a backup frequency of ' . 
            (...)
            $event->setLog($log);

            $server = $this->getDoctrine()
                    ->getRepository('NCbrtBundle:SrvrsServers')
                    ->find($em[$i]['id']);

            $event->setSrvrsServers($server);
            $em = $this->getDoctrine()->getManager();
            $em->persist($event);

            $em->flush();
            echo 'Saved new event with id ' . $event->getId() . '<br>';
        } else {
            echo 'No need to report<br>';                
        }
    }
    return new Response('Done.');
  }
}
根据文档,此查询应该返回并数组,但Simfony抱怨
不能将Doctrine\ORM\EntityManager类型的对象用作数组。查看图片:

我想不出我做错了什么。有人能给我一个线索吗?

如果你能正确地命名你的变量,你就不会有这个错误了

查询结果将进入名为
$em

然后在稍后的循环中,将实体管理器放入其中
$em=$this->getDoctrine()->getManager()

这就是为什么在第一个循环完成后它会出错

public function findServerByBackupReport(){
    $dql = 'SELECT s.name, s.id, MAX(n.dateCreated) latest, s.frequency 
        FROM NCbrtBundle:NcBackupEvents n
        JOIN n.srvrsServers s
        WHERE s.statusActive = 1 GROUP BY s.name';
    $query = $this->getEntityManager()->createQuery($dql);
    try {
        return $query->getResult();
    } catch (\Doctrine\ORM\NoResultException $e) {
        return null;
    }        
}