在DQL / Symfony 3中将if条件添加到where子句

时间:2017-12-30 20:57:35

标签: mysql symfony doctrine-orm dql

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

有没有办法在DQL中实现它?

2 个答案:

答案 0 :(得分:0)

您可以使用条件编写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 =某个价格值,如果此过滤器返回false,则next子句将检查price_new是否等于0然后price =某个价格值

您可以使用doctrine查询构建器,但请确保添加这些括号

答案 1 :(得分: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)

如果这实际上是您要查找的内容,我建议您创建一个迁移,以新价格更新您的表格price字段,然后您可以抛弃多余的price_new。如果您需要当前状态,您可以创建数据库转储并检索这两个值,但在您的实时系统中,您可能只想要一个价格。

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

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

然后就是在代码和数据库中删除多余的price_new,你就可以了。