Seqeulize PostgreSQL ORM (Node.js) 中的 CHECK 约束

问题描述 投票:0回答:2

我使用 Sequelize 作为带有 PostgreSQL 引擎的 ORM。使用原始查询时,我可以创建一个表并具有带有“CHECK”约束的列,例如

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric CHECK (price > 0)
);

在文档中,我在定义模型时找不到在 Sequelize 中执行此操作的方法。有什么办法可以做到这一点吗?我不想重新发明轮子;)

谢谢!!

node.js postgresql sequelize.js
2个回答
9
投票
module.exports = {

    up: (queryInterface, Sequelize) => {

        return queryInterface.createTable('Products', {
            product_no: {
                type: Sequelize.INTEGER
            },
            price: {
                type: Sequelize.NUMERIC
            },
            name: {
                type: Sequelize.TEXT
            }
        }).

        then(() => queryInterface.addConstraint('Products', {
            type: 'check',
            fields: ['price'],  // 2024-05-03: This might be needed in the later versions.
            where: {
                price: {
                    [Sequelize.Op.gt]: 0
                }
            }
        }));
    },

    down: (queryInterface, Sequelize) => {
        return queryInterface.dropTable('Products');
    }
};

-6
投票

查看验证部分

var Product = sequelize.define('product', {
  price: {
    validate: {
      min: 0  // Only allow values >= 0
    }
  }
});

您还可以设置自定义验证规则:

var Product = sequelize.define('product', {
  price: {
    validate: {
      isPositive: function (value) {
        return value > 0;  // Don't allow 0.
      }
    }
  }
});
© www.soinside.com 2019 - 2024. All rights reserved.