我有以下型号Test
module.exports = {
attributes: {
a: {
type: 'number'
},
b: {
type: 'number'
}
}
}
我想建立一个查询,使我可以将字段a
和b
的总和放在where语句中。
SQL等价物:
SELECT * FROM Test WHERE a + b = myValue
我读了有关Criteria modifiers的Sails文档,但对此一无所知。
有什么聪明的方法吗?当然可以使用native query,但是我想避免这种情况,因为我必须将sum与其他修饰符一起使用。原因是我要从单独的文件中生成动态查询,并且要使用本地查询,我还必须处理已经定义的功能,例如or,and等。
我找到了解决方法。也许对某人有用。这不是严格的解决方案/节点解决方案,但是它是一个数据库,但是它完全适合我的情况。
从MySQL 5.7开始,类似generated columns。
生成列是因为这些列中的数据是基于预定义表达式计算的。
我要做的就是向我的Test
模型中添加一个额外的自动生成的列:
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像对待其他专栏一样对待我的专栏,数据库代替我做一切。
当然,我可以毫无问题地将其与其他修饰符混合使用。
到目前为止,我还没有发现任何并发症。