书架.js,基于联接表的查询



我有一个分析项目的架构:

访问具有会话

,会话具有会话数据。

我正在尝试编写一个 Bookshelf 查询,该查询将为我获取访问的最新会话数据条目,而无需诉诸完全"原始"查询。

所以 SQL 查询是这样的:

select sd.* from session_data sd
join sessions s on sd.session_id = s.id
join visits v on s.visit_id = v.id
where v.id = 28
having max(sd.created_at)

我所有的书架模型都有适当的关系,但我只是不确定如何在"书架说话"中构建查询?

var Visit = bookshelf.Model.extend({
  tableName: 'visits',
  hasTimestamps: true,
  Sessions: function() {
        return this.hasMany('Session');
    }
});
var Session = bookshelf.Model.extend({
  tableName: 'sessions',
  hasTimestamps: true,
  visit: function() {
    return this.belongsTo('Visit');
  },
    sessionData: function() {
        return this.hasMany('SessionData');
    }
});
var SessionData = bookshelf.Model.extend({
  tableName: 'session_data',
  hasTimestamps: true,
  session: function() {
    return this.belongsTo('Session');
  }
});

这应该能让你明白:

Visit.where('id', visitID)
    .fetch({ withRelated: [{
        'sessions.session_data': function(qb) {
            qb.orderBy('created_at', 'desc').limit(1);
        }
    }] })
    .then(function(visit) {
        var session = visit.related('sessions').at(0), // Get an arbitrary session.
            sessionData = session.related('session_data');
    });

sessionData 将是一个数组,但不应始终长于一个元素。

相关内容

  • 没有找到相关文章

最新更新