Sequelize Seeding ARRAY (ENUM) - PullRequest
       42

Sequelize Seeding ARRAY (ENUM)

2 голосов
/ 10 октября 2019

Я не могу понять, как посеять ARRAY (ENUM), используя Sequelize. Когда я регистрирую пользователя через свое приложение, я могу создать нового пользователя нормально, но когда я использую queryInterface.bulkInsert в начальном файле, я получаю:

ERROR: column "roles" is of type "enum_Users_roles"[] but expression is of type text[]

вот мой код:

return queryInterface.bulkInsert('Users', [
          {
              email: faker.internet.email(),
              roles: ['user'],
              password: "hash",
              public_id: faker.random.uuid(),
              created_at: new Date(),
              updated_at: new Date()
          }
      ]);

и вот мой файл миграции для пользователя:

return queryInterface.createTable('Users', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      email: {
        type: Sequelize.STRING,
          allowNull: false
      },
      password: {
        type: Sequelize.STRING,
          allowNull: false
      },
      roles: {
        type: Sequelize.ARRAY(Sequelize.ENUM({
            values: ['user', 'setter', 'admin']
        })),
          allowNull: false
      },
      public_id: {
        type: Sequelize.UUID,
          defaultValue: Sequelize.UUIDV4,
          allowNull: false
      },
      created_at: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updated_at: {
        allowNull: false,
        type: Sequelize.DATE
      }
    })

Я просто предполагаю, что я делаю это неправильно, но я не могу найти какой-либодокументация о том, как это сделать правильно. Если кто-то может помочь и объяснить (научить человека ловить рыбу), я был бы признателен.

1 Ответ

0 голосов
/ 16 октября 2019

Кто-то ответил на github здесь

Это их ответ, который работал для меня (и я очень благодарен)

Вы можете использовать этот код

class Item extends Sequelize.Model { }

Item.init({
  name: { type: DataTypes.STRING },
  values: {
    type: DataTypes.ARRAY(DataTypes.ENUM({
      values: ['a', 'b']
    }))
  }
}, {
  sequelize,
  timestamps: true
})

sequelize.sync({ force: true }).then(async () => {
  await sequelize.queryInterface.bulkInsert('Items', [
    {
      name: 'xyz',
      values: sequelize.literal(`ARRAY['a']::"enum_Items_values"[]`),
      createdAt: new Date(),
      updatedAt: new Date()
    }
  ]);
});
Executing (default): INSERT INTO "Items" ("name","values","createdAt","updatedAt") VAL


  [1]: https://github.com/sequelize/sequelize/issues/11541#issuecomment-542791562

Очевидно, вы захотите изменить значения массива и значения перечисления. Например, мой будет ARRAY['user']::"enum_Users_values"[]

...