Php 使用自定义SQL的条令子查询
我从Symfony开始,我试着把所有的电影列表和它们的平均速率都显示出来 我的查询在mySQL上可以正常工作,但在Symfony上不行Php 使用自定义SQL的条令子查询,php,mysql,sql,symfony,doctrine-orm,Php,Mysql,Sql,Symfony,Doctrine Orm,我从Symfony开始,我试着把所有的电影列表和它们的平均速率都显示出来 我的查询在mySQL上可以正常工作,但在Symfony上不行 SELECT m.id FROM AppBundle:Movie AS m LEFT JOIN ( SELECT AVG( rate ) AS avg_rate, movie_id FROM AppBundle:Rate )r ON m.id = r.movie_id 当我运行它时: $em = $this->getDoctrine()->ge
SELECT m.id
FROM AppBundle:Movie AS m
LEFT JOIN (
SELECT AVG( rate ) AS avg_rate, movie_id
FROM AppBundle:Rate
)r ON m.id = r.movie_id
当我运行它时:
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
'SELECT m.id, avg_rate
FROM AppBundle:Movie AS m
LEFT JOIN ( SELECT AVG( rate ) AS avg_rate, movie_id
FROM AppBundle:Rate
) AS r ON m.id = r.movie_id');
$movies = $query->getResult();
我得到了这个错误:
选择平均值(“:错误:未定义类“(”
你能帮忙吗?感谢事实上,通过ORM原则,我们在实体之间有很多关系:
- 独身癖
- 许多
- 奥内托内
->join()
和addSelect()
在第二个实体的表中添加另一个条件。简要介绍一个示例:
$qb = $this->createQueryBuilder('m'); // m : movie
$qb->select('m')
->innerJoin('m.rates', 'r')
->addSelect('r')
->andWhere('r.rate = :rate')
->setParameter('rate', $rate) // $rate = value which you want
我建议您使用->select(),->innerJoin()
而不是像您使用的那样使用原始请求。这对我来说更清楚,因此您可以在此处查看文档:
此查询编译?没有group by子句?是的!我添加了它的屏幕截图。D2不支持AVG开箱即用:您需要创建自己的扩展或找到slready实现它的捆绑包。或者使用SQL而不是DQL。对于使用条令不支持的SQL函数的高级查询,可以使用本机查询好的,谢谢,我要试试这个!