【问题标题】:Node.js sequelize embed hasMany IDsNode.js sequelize embed hasMany IDs
【发布时间】:2014-06-05 16:19:27
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我打算像这样实现它:

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

    【讨论】:

    • 艺术家从何而来?
    • @freakTheMighty 已编辑 - 应该是传递给回调的帖子
    【解决方案2】:

    我建议将责任转嫁给客户。您可以设置自定义序列化程序客户端,将数据重新格式化为 ED 的预期格式。此外,ED 期望它采用这种格式:

    {
       "post": {
         "comments": [1, 2, 3]
       }
    }
    
    App.Post = DS.Model.extend({
       comments = DS.hasMany('comment')
    });
    

    或者如果您选择在响应中包含 cmets

    {
     "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

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

    【讨论】:

    • 感谢您的回答。我一直在寻找的是一种利用 sequelize 进行某种连接以添加评论 ID 的好方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 2013-09-17
    • 2015-05-23
    • 1970-01-01
    相关资源
    最近更新 更多