How to set default boolean value in sequelize

Viewed 15278

How to set default boolean value in sequelize?

var Foo = sequelize.define('foo', {
  name: Sequelize.STRING,
  flag: { type: Sequelize.BOOLEAN, allowNull: false, defaultValue: true}
})
Foo.sync().then(() => {
  Foo.create({name: "name"})
})

nodejs output:

Unhandled rejection SequelizeDatabaseError: Incorrect integer value: 'true' for column 'flag' at row 1

mysql log:

INSERT INTO `foos` (`id`,`name`,`flag`,`createdAt`,`updatedAt`) VALUES (DEFAULT,'name','true','2019-06-27 22:41:25','2019-06-27 22:41:25')

Boolean true was converted to string 'true' automatically by sequelize

Environment:

  1. mysql version: 5.7.9
  2. Sequelize version: 5.8.11
  3. Node Version: v8.9.1
  4. OS: win10
2 Answers

Most databases define booleans as bits, sequelize-auto defines boolean default values as '0' and '1' when it generates a sequelize model from an existing database table.

So instead of true or false use '1' or '0'.

Convert From This

var Foo = sequelize.define('foo', {
  name: Sequelize.STRING,
  flag: { type: Sequelize.BOOLEAN, allowNull: false, defaultValue: true}
})

To This :

var Foo = sequelize.define('foo', {
  name:{
     type: Sequelize.BOOLEAN, 
     allowNull: false, 
     defaultValue: true
  }
});

Related