sequelize: невозможно заполнить значения ассоциации в таблице БД - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь создать ассоциацию в моей базе данных, используя sequelize, таблицы: пользователи и администраторы. Для этого я полагаюсь на этот ответ на форуме. так вот мое семя:

'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)

вывод составил undefined

но данные снова были переданы в таблицу! Я знаю, что здесь происходит, но не знаю, как решить!

P.S. Я также добавил await для самого первого метода up, но это ничего не изменило ..

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Потребовалось некоторое время, чтобы понять это, спасибо всем.

литература, на которую я ссылался: этот вопрос И эта часть официальной документации по сиквелизму

Вот код, который работает:

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

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

        return await queryInterface.bulkInsert('Admins', [{
            id: user.id,
            phone: '+919409662665',
            status: true,
            createdAt: new Date(),
            updatedAt: new Date()
        }], {});
    },
    down: async (queryInterface) => {
        await queryInterface.bulkDelete('Admins', null, {});
        await queryInterface.bulkDelete('Users', null, {});
    }
};
0 голосов
/ 07 сентября 2018

Вы не дожидаетесь окончания вставки пользователей, прежде чем запрашивать их, так что:

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

Пусто, и это users[0].id должно выдавать ошибку типа

Добавление await к вашему первому queryInterface.bulkInsert должно исправить это

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