【发布时间】:2025-12-09 03:05:01
【问题描述】:
我有一个 Analytics 项目的以下架构:
访问有会话,会话有会话数据。
我正在尝试编写一个 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');
}
});
【问题讨论】:
-
我不熟悉 MySQL 的特性,但我认为即使在那里
HAVING子句也需要一个运算符,例如HAVING max(sd.created_at) <operator: =, <, >, ..> <some date expression>。无论如何,我认为书架并没有那么远,您必须使用基于 que knex 的查询构建器。
标签: mysql sql bookshelf.js knex.js