【问题标题】:Waterline - Where with sum of fieldsWaterline - 字段总和的位置
【发布时间】:2020-03-29 15:04:30
【问题描述】:

我有以下型号Test

module.exports = {
    attributes: {
        a: {
            type: 'number'
        },
        b: {
            type: 'number'
        }
    }
}

我想构建一个查询,允许我将字段总和 ab 放在 where 语句中。

SQL 等效:

SELECT * FROM Test WHERE a + b = myValue

我在 Sails 文档中读到了关于 Criteria modifiers 的信息,但没有关于它的消息。

有什么聪明的方法吗?当然我可以使用native query,但我想避免这种情况,因为我必须使用 sum 和其他修饰符。原因是我从单独的文件生成动态查询,并且使用本机查询我还必须处理已经定义的功能,例如 or 和 and 等。

【问题讨论】:

    标签: mysql node.js orm sails.js waterline


    【解决方案1】:

    我找到了解决方法。也许它对某人有用。 这不是严格的风帆/节点解决方案,而是数据库一,但是,它非常适合我的情况。

    从 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 对待我的专栏就像对待其他专栏一样,数据库代替我做所有事情。

    当然,我可以毫无问题地将它与其他修饰符混合使用。

    到目前为止,我还没有看到任何并发症。

    【讨论】:

      猜你喜欢
      • 2015-03-27
      • 2015-07-03
      • 2014-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-01
      相关资源
      最近更新 更多