将 If 条件添加到 DQL/Symfony 3 中的 where 子句

Adding If condition to where clause in DQL / Symfony 3

我有一个学说实体,其中两个变量 $price$price_new 映射到具有相同列名的 mysql table。 $price 包含旧值,$price_new 包含新值。 我想编写一个查询,检查是否 $price_new > 0 然后在 $price_new 上应用 where 但如果 $price_new = 0$price 用于 where 子句。

有什么方法可以用DQL实现吗?

您可以使用或条件为您的条件编写 DQL

select a
from YourBundle:Entity a
where (price_new > 0 and price_new = :price_var)
or (price_new = 0 and price = :price_var )

请注意,过滤条件周围的括号对于满足条件很重要

其中 price_new 大于 0 那么 price_new = 某个价格值 如果此过滤器 returns 为假则下一个子句将检查 price_new 是否等于 0 那么价格 = 一些价格值

您可以使用学说查询生成器,但请确保添加这些括号

你是否偶然寻找这样的东西?

SELECT p
FROM App\Entity\Product p
WHERE (p.price_new > 0 AND p.price_new = :price)
    OR (p.price_new = 0 AND p.price = :price)

如果这确实是您要找的东西,我建议创建一个迁移,用新价格更新您的 table 的 price 字段,然后您可以扔掉一些多余 price_new。如果您需要当前状态,您可以创建一个数据库转储并检索这两个值,但在您的实时系统中您可能只想要一个价格。

迁移可能看起来像这样(这次是真实的 SQL):

UPDATE product SET product.price = product.price_new WHERE product.price_new > 0;

那么只需删除代码和数据库中的冗余 price_new 就可以了。