我有一些应许链来添加数据。如果我在JavaScript文件中“正常”使用它,则从Node.js开始或以其他方式调用它,它可以工作(或多或少-不同的问题)。
但是,如果我想在带有sequelize-cli的sequelize种子文件中使用它(sequelize db:seed:all),promise将不起作用。好的,在.catch
链中遇到了一个错误,但是.then
无法正常工作...
promise字段都是未定义的...
我知道我可以使用bulkInsert,但是如果“必须”使用原始SQL,为什么我要使用ORM,特别是如果我在指向uuid的表之间有链接时?
我定义了模型,有一个“正常”迁移文件,并希望“开始”数据带有种子。我需要单独使用create / bulkCreate promises吗?
我是否错过了文档中的某些内容?
答案 0 :(得分:0)
我自己尝试了很多,并找到了答案: Sequelize dynamic seeding
需要在模型上固定关联:
User.associate = function(models) {
User.belongsToMany(
models.Role, {
through: 'user_role',
}
);
};
和
Role.associate = function(models) {
Role.belongsToMany(
models.User, {
through: 'user_role',
}
);
};
和m:n表需要此:
....
.then(() => {
queryInterface.createTable('user_role', {
userUuid: {
type: Sequelize.UUIDV4,
references: {
model: 'User',
key: 'uuid',
},
allowNull: false,
},
roleUuid: {
type: Sequelize.UUIDV4,
references: {
model: 'Role',
key: 'uuid',
},
allowNull: false,
},
createdAt: { allowNull: false, type: Sequelize.DATE },
updatedAt: { allowNull: false, type: Sequelize.DATE },
});
}).then(() => {
return queryInterface.addConstraint(
'user_role',
['userUuid', 'roleUuid'], {
unique: true,
type: 'primary key',
name: 'userrole_pkey',
}
);
});
将字段重命名为类似于sequelize生成的字段