Php 使用自定义SQL的条令子查询

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

我从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()->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函数的高级查询,可以使用本机查询好的,谢谢,我要试试这个!