【问题标题】:Symfony Doctrine DQL how to add SELECT in a SUM of a main SELECTSymfony Doctrine DQL 如何在主 SELECT 的 SUM 中添加 SELECT
【发布时间】:2020-02-29 16:56:08
【问题描述】:

实际上,我想用 Doctrine 重现这个常规 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 实现此查询?

谢谢帮助

【问题讨论】:

    标签: symfony doctrine dql


    【解决方案1】:

    你忘了放

    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'
    );
    

    【讨论】:

    • 我担心这不起作用......即使有这个更新,我也遇到了同样的错误
    • 根据其他一些调查,这种查询似乎在 Doctrine 中是不可能的,必须回退到原始查询才能实现
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多