我找到了DoctrineExtensions模块实现了一些有用的 MySQL 功能。但我认为我的问题是一个普遍问题。如何将另一个 mysql 表达式作为参数传递给函数?
如果我有两列updated_at
,它是一个DATETIME
和lifespan
,它是一个INT
,我想要要查询实体的生命周期是否已过期,我可以这样做;
WHERE 0 > TIMESTAMPDIFF(SECONDS, NOW(), e.updated_at + INTERVAL e.lifespan SECOND)
在 QueryBuilder 中,它是这样的。
$qb->andWhere('0 > TIMESTAMPDIFF(SECONDS, CURRENT_TIMESTAMP(), e.updated_at + INTERVAL e.lifespan SECOND)');
但是解析器不喜欢 + INTERVAL e.lifespan SECOND
因为它需要右括号而不是加号。
最佳答案
我意识到我可以使用 DoctrineExtensions 中的 DateAdd 类模块。
TIMESTAMPDIFF(SECOND, CURRENT_TIMESTAMP(), DATEADD(e.updated_at, INTERVAL e.lifespan SECOND))
关于php - 原则 2 DQL - 在 QueryBuilder 中嵌套表达式和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10704316/