Symfony原则DQL如何将SELECT添加到主SELECT的总和中

Symfony原则DQL如何将SELECT添加到主SELECT的总和中,symfony,doctrine,dql,Symfony,Doctrine,Dql,实际上,我想用这个常规SQL查询重现: SELECT SUM(b.nb_places * (SELECT pricing FROM param p WHERE t.date BETWEEN p.from_date AND p.to_date)) as gains from booking b INNER JOIN tour t ON b.tour_id = t.id; 根据两个日期之间的价格计算总收益 我在存储库中编写了这个DQL: public function allBooking

实际上,我想用这个常规SQL查询重现:

SELECT SUM(b.nb_places * (SELECT pricing FROM param p WHERE t.date BETWEEN p.from_date AND p.to_date)) as gains from booking b INNER JOIN tour t ON b.tour_id = t.id;
根据两个日期之间的价格计算总收益

我在存储库中编写了这个DQL:

    public function allBooking() {
        $query = $this->manager->createQuery(
            'SELECT 
                 SUM(b.nbPlaces * SELECT p.pricing FROM \App\Entity\Param p WHERE t.date BETWEEN p.fromDate AND p.toDate)
        FROM App\Entity\Booking b JOIN b.tour t'
    );
    return $query->getResult();
}
但运行此查询时,我得到:

[Syntax Error] line 0, col 24: Error: Expected Literal, got 'SELECT' (500 Internal Server Error)
如何使用DQL或QueryBuilder实现此查询


Thx请求帮助

您忘记了放置

SELECT p.pricing FROM \App\Entity\Param p WHERE t.date BETWEEN p.fromDate AND p.toDate
添加到其他括号中

应该是这样的:

$query = $this->manager->createQuery(
    'SELECT SUM(b.nbPlaces * (SELECT p.pricing FROM \App\Entity\Param p WHERE t.date BETWEEN p.fromDate AND p.toDate))
    FROM App\Entity\Booking b JOIN b.tour t'
);

我很震惊,这不起作用。。。即使有了这次更新,我也犯了同样的错误。根据其他一些调查,似乎这种查询在理论上是不可能的,必须回到原始查询来实现