symfony - Symfony Doctrine DQL 如何在主 SELECT 的 SUM 中添加 SELECT
问题描述
实际上,我想用 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 实现此查询?
谢谢帮助
解决方案
你忘了放
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'
);
推荐阅读
- c - 检查索引是否“越界”的最佳方法
- rsa - RSA 公钥加密定理的证明
- tensorflow - 怎么把这个RNN文本分类代码改成文本生成?
- loops - 嵌套在 openmp do 循环中的循环循环会发生什么?
- azure - 将静态 ip 分配到 azure 容器
- java - 图片无法显示
- php - Laravel 插入 | 为什么数据会在页面中发布?
- python - Keras 模型产生相同的输出
- r - 是否有一个函数可以计算 R 中 n 十六进制颜色的平均值?
- flow-project - SUMO 安装 FLOW 后在哪里定位?我们可以在 FLOW 中将自己的模型添加到 SUMO 中吗?