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

问题描述 投票:-1回答:2

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

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

mysql symfony doctrine-orm dql
2个回答
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的问题,你很高兴。


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查询构建器,但请确保添加这些括号

© www.soinside.com 2019 - 2024. All rights reserved.