use*_*990 7 javascript postgresql node.js sequelize.js sequelize-cli
我似乎无法弄清楚如何使用 Sequelize 播种 ARRAY(ENUM)。当我通过我的应用程序注册用户时,我可以很好地创建一个新用户,但是当我在种子文件中使用 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()
}
]);
Run Code Online (Sandbox Code Playgroud)
这是我的用户迁移文件:
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
}
})
Run Code Online (Sandbox Code Playgroud)
我只是假设我做错了,但我找不到任何有关如何正确执行此操作的文档。如果有人可以帮助和解释(教人钓鱼),我将不胜感激。
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
Run Code Online (Sandbox Code Playgroud)
显然您需要更改数组值和枚举值。例如,我的将是
ARRAY['user']::"enum_Users_values"[]
| 归档时间: |
|
| 查看次数: |
2536 次 |
| 最近记录: |