Node.js sequelize embed hasMany ID

时间:2013-11-16 10:30:48

标签: node.js ember.js ember-data sequelize.js

我正在尝试使用ember-data和一个node.js后端的Ember应用程序,使用Sequelize.js从MySQL提供数据。

我的问题: 如果我有一个通过hasMany与Post模型关联的Comment模型,则ember-data的预期JSON看起来像

{
  "post": {
    "comment_ids": [1, 2, 3]
  }
}

使用sequelize来查询/生成此JSON而没有昂贵的循环等的最佳方法是什么?

Comment模型有一个带有post_id的外键。

2 个答案:

答案 0 :(得分:2)

我去实现它:

// include comments
Post.all({
  where: "..",
  include: [Comment]
}).success(function(posts) {
  // collect IDs
  _.each(posts, function(element) {
    element["comments"] = _.pluck(element.comments, 'id');
  });
});

答案 1 :(得分:1)

我建议将降压传递给客户。您可以设置自定义序列化程序客户端,将数据重新格式化为ED的预期格式。此外,ED希望采用以下格式:

{
   "post": {
     "comments": [1, 2, 3]
   }
}

App.Post = DS.Model.extend({
   comments = DS.hasMany('comment')
});

或者如果您选择在回复中包含评论

{
 "post": {
   "id": 1
   "title": "Rails is omakase",
   "comments": ["1", "2"],
   "_links": {
      "user": "/people/dhh"
   },
 },

 "comments": [{
   "id": "1",
   "body": "Rails is unagi"
  }, {
   "id": "2",
   "body": "Omakase O_o"
  }]
}

您可以在此处详细了解:https://github.com/emberjs/data/blob/master/TRANSITION.md

在某些时候,某人将不得不循环(或迭代),并且通过迭代结果集来构建响应(或序列化响应客户端)并不是一种不常见的做法。