代码之家  ›  专栏  ›  技术社区  ›  arijit158

Sequelize js orm seeder用于多关系表

  •  1
  • arijit158  · 技术社区  · 7 年前

    我将对seed进行续集,以加载postges的初始数据。通过创建seedfile.js,我可以对多个表执行此操作。但我无法自动处理表之间的关系。

     // user_seeds.js
        up: function (queryInterface, Sequelize) {
          return queryInterface.bulkInsert(table, [{
            uid: 1, //primary key autogenerated 
            name: 'John doe',
            email: 'john@doe.com',
            created_at,
            updated_at
        }], {});
    
        // roles_seeds.js
        up: function (queryInterface, Sequelize) {
          return queryInterface.bulkInsert(table, [{
            uid: 1,  //this should be comes from user table to this filed automatically after the creation of first record in user table
            name: 'admin',
            email: 'john@doe.com',
            created_at,
            updated_at
          }, {
            id: 2,
            name: 'user',
            created_at,
            updated_at
        }]);
    

    如何将主键作为外键自动传递到另一个表,而无需硬编码。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Furqan Aziz    5 年前

    你必须使用一个播种机和 returning = true 下面是一个例子。您可能需要使用sequelize模型,而不是直接使用 queryInterface

    // user_and_role_seeds.js
    up: function (queryInterface, Sequelize) {
        return UserModel.bulkCreate([{
            uid: 1, // primary key autogenerated 
            name: 'John doe',
            email: 'john@doe.com',
            created_at,
            updated_at
        }], {returning: true}).then(function(users){
            return queryInterface.bulkInsert(table, [{
                uid: users[0].uid, // Here you use users items
                name: 'admin',
                email: 'john@doe.com',
                created_at,
                updated_at
            }, {
                id: users[1].uid,
                name: 'user',
                created_at,
                updated_at
            }]);
        });
    }
    
    • 续集版本:4.x
    • Postgres版本:11.x