Bookshelf.js访问多个相关的表

时间:2016-02-08 03:20:09

标签: bookshelf.js

我正在处理三张桌子。

现在我可以获得用户feed表的activitiesactivityTypes对象(id,来自activitytypes表的类型),但我还需要获取给定活动的related_userusers表)对象,如果列不为空,我将知道related_user的详细信息。

用户

id
email
username
password_hash

activitytypes

id
type

活动

id
user_id (foreign key from users, owner of the activity)
status
activitytype_id (foreign key from activitytypes)
related_user (foreign key from users. 
Shows relation with the user_id, if there's any. 
if activitytype_id is 2 or 3, this will be shown as "followed, "commented", etc.)

我的模特

var activityType = db.Model.extend({
  tableName: 'activitytypes',
  hasTimestamps: false
});

var activity = db.Model.extend({
  tableName: 'activities',
  hasTimestamps: true,

  activityTypes: function() {
    return this.belongsTo(activityType);
  }
});

var user = db.Model.extend({
  tableName: 'users',
  hasTimestamps: true,
    feed: function() {
    return this.hasMany(activity);
  }
});

这是我现有的查询,如何添加related_user对象呢?

user.where({id : 43}).fetchAll({withRelated : ['feed.activityTypes']}).then(function(data) {
    data = data.toJSON();
    res.send(data);
  });

1 个答案:

答案 0 :(得分:1)

我解决了。

我向activity添加了一种新方法,如下所示。

userRelated : function() {
    return this.belongsTo(user,'related_user');
  }

这是更新后的查询。我不知道它在优化方面是否正确,但它确实有效。

user.where({
    id: 43
  }).fetchAll({
    withRelated: ['feed.userRelated', 'feed.activityTypes']
  }).then(function(data) {
    data = data.toJSON();
    res.send(data);
  });

现在Feed,userRelated和activityTypes会毫无问题地返回,所有内容都以JSON格式显示在data中。