我开始研究 Doctrine 2 并将 sql 查询转换为对 EntityManager 的查询,$this->em->getRepository(...)->...
但我无法转换一个查询:
SELECT * FROM mytable ORDER BY (a - b - c) DESC LIMIT :offset, :rows
a、b、c - mytable 表中的字段。
到处都只给出了如何根据两个数字的差异进行排序的示例,但我无法理解如何根据三个数字的差异进行排序。
如何将此请求更改为对 EntityManager 的请求?
在 DQL 中,您使用的不是数据库表,而是实体,因此查询应该包含实体类的名称(可能是缩写形式)及其别名,而不是 mytable。此别名应用作所用实体属性的前缀:
DQL 不直接支持 LIMIT 表达式(可能是因为此构造不是 SQL 的标准,并且在不同方言中的实现方式不同)。但是,您可以使用setFirstResult() 和 setMaxResults()方法来设置偏移量和样本结果数。
关于问题的最后一部分:
表达式中涉及多少个字段(2、3 或 100)完全无关紧要。