Php symfony 3.3和3.4条令实体管理器到阵列的转换
我有下面的控制器,它在symfony 3.3和3.4上给出了相同的问题,所有这些都使用PHP7。当我只从DB返回一个元素时,控制器工作。问题是当查询返回多个元素时。在这种情况下,它返回一个Symfony错误。这是控制器的操作: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
(...)
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;
}
}