Sequelize.js 使用异步模型查询对数据库种子进行续集
我有两个相关的表,我想在这些表上添加种子。用户播种机工作正常,并且 在我的第二个种子文件中,我查询所有用户,然后将每个用户附加到users\u信息表中。这是我的密码Sequelize.js 使用异步模型查询对数据库种子进行续集,sequelize.js,sequelize-cli,Sequelize.js,Sequelize Cli,我有两个相关的表,我想在这些表上添加种子。用户播种机工作正常,并且 在我的第二个种子文件中,我查询所有用户,然后将每个用户附加到users\u信息表中。这是我的密码 var chance = require('chance').Chance(); const User = require('../models/User'); module.exports = { up: function (queryInterface, Sequelize) { User.findAll()
var chance = require('chance').Chance();
const User = require('../models/User');
module.exports = {
up: function (queryInterface, Sequelize) {
User.findAll()
.then(users => {
var usersInfo = [];
for(let user of users) {
var userInfo = {
user_id: user.id,
first_name: user.username,
middle_name: chance.last(),
last_name: chance.last(),
address: chance.address()
};
usersInfo.push(userInfo);
}
return queryInterface.bulkInsert('users_information', usersInfo);
})
.catch(error => console.error(error));
},
down: function (queryInterface, Sequelize) {
return queryInterface.bulkDelete('users_information', null, {});
}
};
当我运行db:seed:all命令时,它运行时没有错误,并且用户信息表上的数据为空
播种机在没有模型查询的情况下工作。只是为了测试我的播种器文件是否有效
up: function (queryInterface, Sequelize) {
var usersInfo = [];
for(var i = 1; i <= 10; i++) {
var userInfo = {
user_id: i,
first_name: chance.first(),
middle_name: chance.last(),
last_name: chance.last(),
address: chance.address()
};
usersInfo.push(userInfo);
}
return queryInterface.bulkInsert('users_information', usersInfo);
},
用户信息表
- id (PK)
- username
- user_type
- is_active
- id (PK)
- user_id (FK)
- first_name
- last_name
- address
有什么建议或想法吗?谢谢 我遇到了类似的问题。我的问题是通过回复承诺来解决的。我认为sequelize期待着回报一个承诺。它将等待承诺得到解决或拒绝。如果一个承诺没有得到回报,我想它会假定一切都“完成”并且“很好”。您的第一个示例是不返回承诺。它只是“运行”并在不等待所有异步代码完成的情况下存在(aka User.findAll()) 解决方案: 我认为,如果你在up方法中返回一个承诺,并在“完成”后解决它,我认为这会起作用。例如:
up: function (queryInterface, Sequelize) {
// return a new promise that sequelize will wait for...
return new Promise((resolve, reject)=>{
User.findAll()
.then(users => {
var usersInfo = [];
for(let user of users) {
var userInfo = {
user_id: user.id,
first_name: user.username,
middle_name: chance.last(),
last_name: chance.last(),
address: chance.address()
};
usersInfo.push(userInfo);
}
// Notice we are not returning this.
queryInterface.bulkInsert('users_information', usersInfo);
resolve('Done');
})
.catch((error) => {
console.error(error);
reject(error)
});
}
},
我遇到了类似的问题。我的问题是通过回复承诺来解决的。我认为sequelize期待着回报一个承诺。它将等待承诺得到解决或拒绝。如果一个承诺没有得到回报,我想它会假定一切都“完成”并且“很好”。您的第一个示例是不返回承诺。它只是“运行”并在不等待所有异步代码完成的情况下存在(aka User.findAll()) 解决方案: 我认为,如果你在up方法中返回一个承诺,并在“完成”后解决它,我认为这会起作用。例如:
up: function (queryInterface, Sequelize) {
// return a new promise that sequelize will wait for...
return new Promise((resolve, reject)=>{
User.findAll()
.then(users => {
var usersInfo = [];
for(let user of users) {
var userInfo = {
user_id: user.id,
first_name: user.username,
middle_name: chance.last(),
last_name: chance.last(),
address: chance.address()
};
usersInfo.push(userInfo);
}
// Notice we are not returning this.
queryInterface.bulkInsert('users_information', usersInfo);
resolve('Done');
})
.catch((error) => {
console.error(error);
reject(error)
});
}
},
我还尝试添加user=user.get({plain:true});在users循环中,仍然不工作我还尝试添加user=user.get({plain:true});在用户循环中,仍然不工作