我有以下模型测试
module.exports = {
attributes: {
a: {
type: 'number'
},
b: {
type: 'number'
}
}
}
我想构建一个查询,允许我将字段 a
和 b
的总和放入 where 语句中。
相当于 SQL:
SELECT * FROM Test WHERE a + b = myValue
我在 sails 文档中读到了关于 Criteria modifiers 的内容但没有任何相关消息。
有什么聪明的方法可以做到这一点吗?我当然可以使用native query但我想避免这种情况,因为我必须将总和与其他修饰符一起使用。原因是我从单独的文件生成动态查询,并且使用 native 查询我还必须处理已经定义的功能,例如 or、and 等。
最佳答案
我找到了解决方法。也许这对某人有用。 它不是严格的 sails/node 解决方案,而是数据库解决方案,但是,它非常适合我的情况。
从 MySQL 5.7 开始,有类似 generated columns 的内容。 .
Columns are generated because the data in these columns are computed based on predefined expressions.
我所要做的就是向我的测试
模型添加一个额外的自动生成的列:
module.exports = {
attributes: {
a: {
type: 'number',
columnType: 'int'
},
b: {
type: 'number',
columnType: 'int'
},
c: {
type: 'number',
columnType: 'int GENERATED ALWAYS AS(a + b) VIRTUAL'
}
}
}
现在我可以执行这样的查询:
const result = await Test.find({ c: 2 })
...我得到了正确的结果。 Waterline 像对待其他专栏一样对待我的专栏,数据库代替我完成所有事情。
当然,我可以将它与其他修饰符混合使用,没有任何问题。
到目前为止我还没有看到任何并发症。
关于mysql - 水线 - 字段总和的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59182326/