如何通过sequelize queryInterface插入关联行

How to insert a row with association through sequelize queryInterface

我正在使用带有 sequelize 的 sequelize cli 为多对多连接生成种子文件 table

这里我有用户和 Collections 和 User_Collections 作为连接 table 我已经为用户和 Collection 创建了种子文件,但我想为加入 table 创建种子文件。如何动态访问 User 或 Collection 中行的 ID,以便我可以将该值插入到联接 table bulkinsert

用户:



    module.exports = {
      up: (queryInterface, Sequelize) => queryInterface.bulkInsert('Users', [ {
        first_name: 'John',
        last_name: 'Doe',
        email: 'john.doe@gmail.com',
        password: 'testme',
        createdAt: new Date(),
        updatedAt: new Date(),
      }], {}),
      down: (queryInterface, Sequelize) => queryInterface.bulkDelete('Users', null, {}),
    };


Collection



    module.exports = {
      up: (queryInterface, Sequelize) => queryInterface.bulkInsert('Collections', [{
        collection_name: 'Test Collection1',
        createdAt: new Date(),
        updatedAt: new Date(),
      }, {
        collection_name: 'Test Collection2',
        createdAt: new Date(),
        updatedAt: new Date(),
      }, {
        collection_name: 'Test Collection3',
        createdAt: new Date(),
        updatedAt: new Date(),
      }]),

      down: (queryInterface, Sequelize) => queryInterface.bulkDelete('Collections', null, {}),
    };


用户queryInterface.sequelize获取sequelize对象,然后查询您需要的id

'use strict';
var Promise = require("bluebird");

module.exports = {
  up: (queryInterface, Sequelize) => {
    var sequelize = queryInterface.sequelize;
    return Promise.all([
    sequelize.query('SELECT id FROM users', { type: sequelize.QueryTypes.SELECT}),
    sequelize.query('SELECT id FROM collections', { type: sequelize.QueryTypes.SELECT}),
    ]).spread((userids, collectionsids)=>{
      var user_collections = [];
      userids.forEach(userId=> {
        collectionsids.forEach(collectionId =>{
              user_collections.push({
                user_id: userId.id,
                collection_id: collectionId.id,
                createdAt: new Date(),
                updatedAt: new Date(),
              })
        });
      });
      return queryInterface.bulkInsert('User_Collections', user_collections, {});
    })
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.bulkDelete('User_Collections', null, {});
  }
};