如何只获取相关数据?

时间:2016-08-18 20:15:02

标签: node.js bookshelf.js

假设一个简单的一对多关系,例如

const Blog = Bookshelf.Model.extend({
  tableName: 'blog',
  posts: function () {
    return this.hasMany(Post);
  }
});

const Post = Bookshelf.Model.extend({
  tableName: 'post',
  blog: function () {
    return this.belongsTo(Blog)
  }
});

如何在不提取博客条目的情况下获取特定博客条目的所有帖子?

使用:

Blog
  .where('id', args.id)
  .fetch({
    withRelated: [
      Post
    ]
  })
  .call('related', 'post')
  .call('toJSON');

会导致一个极端的请求。

我发现这样做的唯一方法是使用自定义查询查询Post对象,例如

Post
  .where('blog_id', parent.id)
  .fetchAll()
  .call('toJSON');

后一种方法的问题在于它否定了首先建立关系的目的。

1 个答案:

答案 0 :(得分:1)

实例化一个模型(您可以使用new ModelModel.forge())并设置主键(但是您想要,但在初始属性中传递它通常是最简单的)。然后致电model.load()以急切加载相关模型。例如:

Blog
  .forge({
    id: 1
  })
  .load('posts')
  .call('related', 'posts')
  .call('toJSON')
  .then((posts) => {
    console.log('posts', posts);
  });