我是一个有两个变量$price
&的学说实体。 $price_new
映射到具有相同列名的mysql表。
$price
包含旧值,$price_new
包含新值。
我想写一个查询,检查$price_new > 0
是否适用于$price_new
,但如果$price_new = 0
,$price
用于where子句。
有没有办法在DQL中实现它?
答案 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
,你就可以了。