我有一个学说实体,有两个变量$price
和$price_new
映射到具有相同列名的mysql表。 $price
包含遗留值,$price_new
包含新值。我想编写一个查询,检查$price_new > 0
然后应用于$price_new
,但如果$price_new = 0
,$price
用于where子句。
有没有办法在DQL中实现它?
你偶然找一下这样的东西吗?
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
的问题,你很高兴。
您可以使用或根据您的条件编写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查询构建器,但请确保添加这些括号