0

我想列出所有用户 ConversationData(一个用户有很多 CovnresationData),但是当我按照官方网站上的教程进行操作时,我得到了“未定义”。帮助,伙计们!

 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

在我看来,请求完全错误。据我了解,它必须加入用户和对话数据表。

4

1 回答 1

0

至少就我所见的 MySQL 而言,ORMhasMany通过创建一个“合并”表来处理关系,在您的情况下,它很可能是您所看到的user_conversationsData. 这个表应该有 3 列,id(生成,忽略它),user_id映射到Users表,并conversationdata_id映射到conversationData表。

你有autofetch,ORM 将做的是获取User,然后通过将额外的合并表加入到表中来获取conversationdata_id's和。这是您看到的查询。conversationData'sconversationData

要访问对话数据,您应该能够将其视为一个属性userInstance.conversationDatas。如果这不起作用,请尝试打电话console.dir(Object.keys(userInstance))查看那里有什么。

于 2016-04-10T06:43:21.903 回答