我正在尝试使用sequelize将关联播种到我的数据库中,表为:Users和Admins。为此,我依靠论坛上的this answer。所以这是我的种子:
'use strict';
const bcrypt = require('bcryptjs')
module.exports = {
up: async (queryInterface, Sequelize) => {
queryInterface.bulkInsert('Users', [{
firstName: 'someone',
lastName: 'awesome',
email: 'someone@somewhere.com',
password: bcrypt.hashSync('helloWorld', 8),
type: 'admin',
createdAt: new Date(),
updatedAt: new Date()
}], {});
const users = await queryInterface.sequelize.query(
'SELECT id from Users;'
);
return await queryInterface.bulkInsert('Admins', [{
id: users[0].id,
phone: '+9999999999',
status: true, createdAt: new Date(),
updatedAt: new Date()
}]);
},
down: async (queryInterface) => {
await queryInterface.bulkDelete('Admins', null, {});
await queryInterface.bulkDelete('Users', null, {});
}
};
现在,用户表中的数据完全正确,但是管理表仍然为空
编辑:
我尝试使用以下代码打印出users [0] .id:
const users = await queryInterface.sequelize.query(
"SELECT id from Users"
);
console.log(users[0].id)
输出为undefined
但是数据再次被送到表中!我知道这里发生了什么,但不知道如何解决!
P.S。 我还添加了等待up的第一种方法,但这并没有改变。.
答案 0 :(得分:2)
答案 1 :(得分:0)
在查询用户之前,您不等待用户插入结束,因此:
const users = await queryInterface.sequelize.query(
'SELECT id from Users;'
);
为空,并且此users[0].id
必须抛出类型错误
在您的第一个await
中添加queryInterface.bulkInsert
应该可以解决此问题
await queryInterface.bulkInsert('Users', [{ // ...
答案 2 :(得分:0)
您需要将await
添加到第一个bulkInsert
方法调用中,并将其结果保存到userId
变量中。 bulkInsert
承诺通过插入序列的第一个ID进行解析,因此您可以使用它来创建管理员,如下所示:
'use strict';
const bcrypt = require('bcryptjs');
module.exports = {
up: async (queryInterface, Sequelize) => {
const userId = await queryInterface.bulkInsert('Users', [{
firstName: 'someone',
lastName: 'awesome',
email: 'someone@somewhere.com',
password: bcrypt.hashSync('helloWorld', 8),
type: 'admin',
createdAt: new Date(),
updatedAt: new Date()
}], {});
return queryInterface.bulkInsert('Admins', [{
id: userId,
phone: '+9999999999',
status: true,
createdAt: new Date(),
updatedAt: new Date(),
}]);
},
down: async (queryInterface) => {
await queryInterface.bulkDelete('Admins', null, {});
await queryInterface.bulkDelete('Users', null, {});
}
};
答案 3 :(得分:0)
您可以接收插入对象的数组,并在管理员插入中使用它。
let ids = await queryInterface.bulkInsert('Users', [{
firstName: 'someone',
lastName: 'awesome',
email: 'someone@somewhere.com',
password: bcrypt.hashSync('helloWorld', 8),
type: 'admin',
createdAt: new Date(),
updatedAt: new Date()
}], { returning: ['id'] });
let adminId = ids[0];
//Insert admin