2016-11-06 5 views
0

PostgreSQLエンジンでSequelizeをORMとして使用しています。生のクエリを使用している場合、私はテーブルを作成し、私はモデルを定義するときにSequelizeでこれを行うための方法を見つけることができませんドキュメントでは、このようなSeqeulizeのCHECK制約ORM(Node.js)

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

として「CHECK」制約を持つ列を持つことができます。これを行う方法はありますか?私は車輪を再発明したくありません;)

ありがとう!!

答えて

0

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

私はこれが唯一のアプリケーション層で値を強制すると信じています。私はこれが実際にテーブルに制約を課すとは思わない。移行の続行を使用している場合は、生の問合せを実行して、自分で制約を挿入できます。 – thgaskell

+0

上記のコメントに同意してください。フォースシンクとマイグレーションを一致させる方法を検討していました(フォースシンクはサークルテストで使用されています)。 最後の解決策は、circle-ciでforce-syncの代わりにマイグレーションを使用することでした。少し遅くなりましたが、それと同じように機能します。 –

0
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'); 
    } 
};