将 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
就可以了。
我有一个学说实体,其中两个变量 $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
就可以了。