Node.js sequelize:无法在DB表中为关联值设定种子

Node.js sequelize:无法在DB表中为关联值设定种子,node.js,orm,sequelize.js,Node.js,Orm,Sequelize.js,我正试图使用sequelize将一个关联植入我的数据库,表是:Users和Admins。为此,我依靠论坛。这是我的种子: 'use strict'; const bcrypt = require('bcryptjs') module.exports = { up: async (queryInterface, Sequelize) => { queryInterface.bulkInsert('Users', [{ firstName: 's

我正试图使用sequelize将一个关联植入我的数据库,表是:Users和Admins。为此,我依靠论坛。这是我的种子:

'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, {});
    }
};
现在,用户表中的数据已完全字段化,但管理表仍然为空

编辑:

我试图用以下代码打印出用户[0]。id:

const users = await queryInterface.sequelize.query(
    "SELECT id from Users"
);

console.log(users[0].id)
输出未定义

但是数据又一次被输入了表格!我知道这里发生了什么,但不知道如何解决

附言。
我还添加了wait for the up的第一个方法,但这没有改变任何内容。

在查询用户之前,您没有等待用户插入结束,因此:

const users = await queryInterface.sequelize.query(
   'SELECT id from Users;'
);
为空,并且此
用户[0]。id
必须引发类型错误

wait
添加到第一个
queryInterface.bulkInsert
应该可以解决这个问题

await queryInterface.bulkInsert('Users', [{ // ...

花了一段时间才弄明白,谢谢大家

我提到的文献: 及 正式续集文档

以下是有效的代码:

'use strict';
const bcrypt = require('bcryptjs');
const models = require('../models');
const User = models.User;
module.exports = {
    up: async (queryInterface, Sequelize) => {
        queryInterface.bulkInsert('Users', [{
            firstName: 'aname',
            lastName: 'alastname',
            email: 'someemail@somewhere.com',
            password: bcrypt.hashSync('poochies', 8),
            type: 'admin',
            createdAt: new Date(),
            updatedAt: new Date()
        }], {});

        const user = await User.findOne({
            where: {
                type: 'admin',
                email: 'someemail@somewhere.com'
            },
        });

        return await queryInterface.bulkInsert('Admins', [{
            id: user.id,
            phone: '+999999999999',
            status: true,
            createdAt: new Date(),
            updatedAt: new Date()
        }], {});
    },
    down: async (queryInterface) => {
        await queryInterface.bulkDelete('Admins', null, {});
        await queryInterface.bulkDelete('Users', null, {});
    }
};

您需要将
wait
添加到第一个
bulkInsert
方法调用中,并将其结果保存到
userId
变量中。
bulkInsert
promise通过插入序列的第一个ID解析,因此您可以使用它创建如下管理员:

“严格使用”;
const bcrypt=require('bcryptjs');
module.exports={
up:async(查询接口,续集)=>{
const userId=await queryInterface.bulkInsert('Users'[{
名字:“某人”,
姓氏:“太棒了”,
电邮:'someone@somewhere.com',
密码:bcrypt.hashSync('helloWorld',8),
键入:“admin”,
createdAt:新日期(),
更新日期:新日期()
}], {});
返回queryInterface.bulkInsert('Admins'[{
id:userId,
电话:“+9999999”,
状态:正确,
createdAt:新日期(),
更新日期:新日期(),
}]);
},
向下:异步(查询接口)=>{
等待queryInterface.bulkDelete('Admins',null,{});
等待queryInterface.bulkDelete('Users',null,{});
}
};

您可以接收插入对象的数组,并在管理员插入中使用它

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

对不起,我还在用Eddition。在第一个
bulkInsert
上使用
wait
应该可以!我这样做了,但是cli响应为:
错误:列“id”不能为null
!但是数据已经被插入到用户表中。也许您可以记录
用户的内容
以查看该查询返回的内容。您就快到了,再进行一些调试和编码,您的代码就会达到预期效果。我的提示是:检查
用户的内容
,而不仅仅是
用户[0]。id
,祝你好运!找到答案并将其发布在下面的这个帖子上!谢谢