簡體   English   中英

Sequelize.js node.js多對多關聯

[英]Sequelize.js node.js many to many association

我正在使用sequelize node.js模塊在Postgres sql中形成架構

我有以下兩個Project和我的用戶架構。

項目

module.exports = function(sequelize, DataTypes) {
    var project = sequelize.define('project', {
        description: DataTypes.STRING
    },{
        classMethods: {
            associate: function(models) {
                project.hasMany(models.myusers,{through:"project_persons"});
            }
        }
    });

    return project;
};

我的用戶

    module.exports = function(sequelize, DataTypes) {
        var myusers = sequelize.define('myusers', {
        name: DataTypes.STRING
    },{
        classMethods: {
            associate: function(models) {
                myusers.hasMany(models.project,{through:"project_persons"});
            }
        }
    });

    return myusers;
};

我試圖建立多對多的關系。 當我運行應用程序的第三個表“ project_person已創建”時。

index.js(路由),我有以下代碼

models.myusers.create({
        description:"newuser"
    }).success(function(user) {
        var project1;
        var project2;

        models.project.create({
            description:"p1"
        }).success(function(p1){
            console.log("Project 1 created");
            project1 = p1;
        });
         models.project.create({
            description:"p2"
        }).success(function(p2){
            console.log("Project 2 created");
            project2 = p2;
        });

       user.setProjects([project1,project2]).success(function() {
                console.log("CREATION SUCESS");
       });
    });

在屏幕上給我以下錯誤

/home/hassan/Desktop/node/node_modules/sequelize/lib/associations/has-many-double-linked.js:151 foreignIdentifier] =(((targetKeys.length === 1)?unassociatedObject [targetKey ^ TypeError:無法讀取在/home/hassan/Desktop/node/node_modules/sequelize/lib/associations/has-many-double-linked.js:151:88在module.exports.HasManyDoubleLinked的Array.map(native)處未定義的屬性'id' .injectSetter(/home/hassan/Desktop/node/node_modules/sequelize/lib/associations/has-many-double-linked.js:147:38)在實例上。(匿名函數).success.proxy.events(/ home /hassan/Desktop/node/node_modules/sequelize/lib/associations/has-many.js:317:39)在event.mitter.emit(events.js:95:17)在module.exports.CustomEventEmitter.emit(/ home / hassan / Desktop / node / node_modules / sequelize / lib / emitters / custom-event-emitter.js:107:33)為null(/ home / hassan / Desktop / node / node_nodes / sequelize / lib / associations / has-many -double-linked.js:74:63)在module.exports.CustomEventEmi處的EventEmitter.emit(events.js:95:17) tter.emit(/home/hassan/Desktop/node/node_modules/sequelize/lib/emitters/custom-event-emitter.js:107:33)在generator.query.success.error.proxy.events(/ home / hassan /Desktop/node/node_modules/sequelize/lib/query-interface.js:890:19)24 Apr 10:31:47-[nodemon]應用程序崩潰-等待文件更改,然后再開始...

誰能告訴我我要去哪里錯了。

Sequelize是一個異步庫,因此您必須使用回調。 這應該可以按預期工作:

models.myusers.create({ description: "newuser" }).success(function(user) {
  models.project.create({ description: "p1" }).success(function(project1) {
    console.log("Project 1 created");
    models.project.create({ description: "p2" }).success(function(project2) {
      console.log("Project 2 created");
      user.setProjects([ project1, project2 ]).success(function() {
        console.log("CREATION SUCESS");
      });
    });
  });
});

更好的是:正確使用complete()和錯誤(如果有):

models.myusers.create({ description: "newuser" }).complete(function(err, user) {
  if (err) throw err;
  models.project.create({ description: "p1" }).complete(function(err, project1) {
    if (err) throw err;
    console.log("Project 1 created");
    models.project.create({ description: "p2" }).complete(function(err, project2) {
      if (err) throw err;
      console.log("Project 2 created");
      user.setProjects([ project1, project2 ]).complete(function(err, association) {
        if (err) throw err;
        console.log("CREATION SUCESS");
      });
    });
  });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM