在Seqeulize PostgreSQL ORM(Node.js)中检查约束

时间:2016-11-06 00:31:53

标签: node.js postgresql sequelize.js

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

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

在文档中,在定义模型时,我无法在Sequelize中找到这样做的方法。有没有办法做到这一点?我不想重新发明轮子;)

谢谢!

2 个答案:

答案 0 :(得分:2)

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', ['price'], {
            type: 'check',
            where: {
                price: {
                    [Sequelize.Op.gt]: 0
                }
            }
        }));
    },

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

答案 1 :(得分:-4)

查看Validations section

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.
      }
    }
  }
});