节点ORM有很多关联

时间:2016-04-03 17:43:05

标签: node.js orm associations node-orm2

我想列出所有用户ConversationData(ONE User HAS MANY CovnresationData),但是我得到了#undefined'当我在官方网站上关注教程。帮帮忙,伙计们!

 var User = db.define("user", {
      name      : String,
      surname   : String,
      avatar    : String,
      username  : String,
      token     : String
    }, {
      autoSave: true
    });

var Conversation = db.define("conversations", {
  name       : Number,
  createdAt  : Date,
  updatedAt  : Date
});
var ConversationData = db.define("conversation_data", {
  user_id         : Number,
  conversation_id : Number
});


db.sync();



 User.hasMany('conversationsData', ConversationData, {}, {
  autoFetch: true
});
User.find({id: 1}).first(function(err, asda) {
  cconsole.log(asda.conversationsData);

});

输出:

(orm/postgres) SELECT "t1"."user_id", "t1"."conversation_id", "t1"."id" FROM "conversation_data" "t1" JOIN "user_conversationsData" "t2" ON "t2"."conversationsdata_id" = "t1"."id" WHERE "t2"."user_id" = 1
undefined

请求在我看来是完全错误的。它必须加入用户和会话数据表,据我所知..

1 个答案:

答案 0 :(得分:0)

至少就我在MySQL中看到的那样,ORM通过创建“合并”表来处理hasMany关系,在您的情况下,它可能是您所看到的user_conversationsData。此表应包含3列id(生成,忽略它),user_id映射到Users表,conversationdata_id映射到conversationData

您已启用autofetch,ORM将执行的操作是获取User,然后通过将额外的合并表加入到conversationdata_id'sconversationData's来获取conversationData表。这是您看到的查询。

要访问conversationData,您应该可以将其视为属性userInstance.conversationDatas。如果这不起作用,请尝试拨打console.dir(Object.keys(userInstance))以查看其中的内容。