【发布时间】:2017-05-30 10:34:05
【问题描述】:
我有多台机器连接到我的数据库中的一堆统计数据,我只需要检索每台机器的最新统计数据。
我通过以下请求使用了学说实体管理器:
$str = "SELECT s, sa.slug ";
$str .= "FROM AppBundle:Statistique s ";
$str .= "LEFT JOIN AppBundle:StatistiqueAnomalie sa WITH (s.anomalie = sa.num) ";
$str .= "LEFT JOIN AppBundle:Statistique sp WITH (s.numserieMachine = sp.numserieMachine AND s.datecrea < sp.datecrea) ";
$query = $this->getEntityManager()->createQuery($str);
//var_dump($query->getSql());
return $query->getResult();
但是这个请求非常慢(大约=22 秒),所以我想用原始 sql 中更优化的请求替换它:
$str = "SELECT * FROM
( SELECT numserie_machine, MAX( datecrea ) as ma FROM statistique GROUP BY numserie_machine ) as maxv
INNER JOIN statistique s on maxv.numserie_machine=s.numserie_machine and maxv.ma=s.datecrea
LEFT JOIN statistique_anomalie sa on s.anomalie=sa.num";
$conn = $this->getEntityManager()->getConnection();
$query = $conn->prepare($str);
$query->execute([]);
return $query->fetchAll();
此请求运行良好且速度不错,但我无法使用数据。事实上,我的 twig 文件使用理论实体而不是关联数组。
有没有办法将我的结果映射到实体?或者至少,有没有办法用 DQL 执行类似的请求?
谢谢。
【问题讨论】:
标签: php symfony doctrine-orm doctrine