DataTypes.JSON dosn't work with seeding and arrays

Open
#1,152 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
38/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
javascript, mariadb
Domain
cli, database

Research direction

Start with the seed file's queryInterface.bulkInsert call and reproduce it using npx sequelize db:seed:all against MariaDB 10.5. Compare this path with the working model save example, then verify that a seeded JSON array is stored as an array and add or run a regression check for that behavior.

Written by the indexing model from the issue text.

Description

bug

What you are doing?

I used npx sequelize db:seed:all to seed a database entry.
If I try to create it in the project itself everything is working fine (see test file)

Test File
const { test } = require('./models')
let test1 = test.build({
    arr: ['test1'],
    createdAt: new Date(),
    updatedAt: new Date()
})
test1.save()
Model File
const {
  Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
  class test extends Model {
    /**
     * Helper method for defining associations.
     * This method is not a part of Sequelize lifecycle.
     * The `models/index` file will call this method automatically.
     */
    static associate(models) {
      // define association here
    }
  }
  test.init({
    arr: DataTypes.JSON,
  }, {
    sequelize,
    modelName: 'test',
  });
  return test;
};
Seed File
module.exports = {
  async up (queryInterface, Sequelize) {
    return queryInterface.bulkInsert('test',[
      {
        arr: ['test1'],
        createdAt: new Date(),
        updatedAt: new Date()
      }
    ])
  },

  async down (queryInterface, Sequelize) {
     return queryInterface.bulkDelete('test', null, {});
  }
};

What do you expect to happen?

Insert a new row into the database with the array

What is actually happening?

The array isnt beeing parsed to ['test1'], it's getting parsed to 'test1'

ERROR: (conn=81, no: 4025, SQLState: 23000) CONSTRAINT `test.arr` failed for `database_dev`.`test`
INSERT INTO `tests` (`test`,`createdAt`,`updatedAt`) VALUES ('test','2022-09-14 09:17:45.936','2022-09-14 09:17:45.936');

Dialect: mariadb
Database version: 10.5.15
Sequelize CLI version: 6.4.1
Sequelize version: 6.21.6

Dominant language
JavaScript
Stars
2.6k
Forks
524
PR merge metrics
No merged PRs in 30d

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from sequelize/cli

All issues in sequelize/cli

Similar issues

More JavaScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.