2016-11-06 5 views
0

Я использую Sequelize как ORM с движком PostgreSQL. При использовании сырых запросов я могу создать таблицу и есть столбцы с ограничениями «Check», такие какОграничения CHECK в Seqeulize PostgreSQL ORM (Node.js)

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

В документации я не могу найти способ сделать это в Sequelize при определении моделей. Есть ли способ сделать это? Я не хочу изобретать велосипед;)

Спасибо!

ответ

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

Я считаю, что это только усиливает значение на уровне приложений. Я не думаю, что это фактически ограничивает таблицу. Если вы используете sequelize migrations, вы можете запустить необработанный запрос, чтобы вставить ограничение самостоятельно. – thgaskell

+0

Согласен с комментарием выше. Я искал способ сопоставления силовой синхронизации и миграции (силовая синхронизация используется при тестировании окружности ci). Решение в конце концов состояло в том, чтобы использовать миграции вместо силовой синхронизации в круге-ci, немного медленнее, но работает так же хорошо. –

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

 Смежные вопросы

  • Нет связанных вопросов^_^