如何在bookshelf.js中实现以下关系
SELECT user_accounts.user_id, `event_id`
FROM `calendar_events`
JOIN user_accounts ON user_accounts.user_id = calendar_events.`created_by`
LIMIT 10我的模型
var CalendarEvent = bookshelf.Model.extend({
tableName: 'calendar_events',
hasTimestamps: ['created_on'],
user: function() {
return this.hasOne('UserAccount','user_id');
}
});
var UserAccount = bookshelf.Model.extend({
tableName: 'user_account'
});发布于 2016-05-04 14:18:45
如果您想获得确切样式查询,可以使用knex查询构建器,并尝试构建一个符合您需要的查询
我还没有测试过,但应该是这样的
CalendarEvent.forge().query(function(qb){
qb.join('user_accounts', 'user_accounts.user_id', '=', 'calendar_events.created_by');
//qb.where() //if you wanted
//qb.andWhere(); //and if you wanted more
qb.limit(10);
})
.fetchAll();(你不需要.where或.andWhere,添加它们只是为了好玩)
完全在书架上做可能是可能的,但目前我不确定如何做。
发布于 2018-02-20 18:39:59
我想你从2016年就找到了解决方案,但这是答案
var CalendarEvent = bookshelf.Model.extend({
tableName: 'calendar_events',
hasTimestamps: ['created_on'],
user: function() {
return this.belongsTo(UserAccount, 'user_id', 'created_by');
}
});
var UserAccount = bookshelf.Model.extend({
tableName: 'user_account'
});使用belongsTo()方法,因为外键在CalendarEvent模型中,而不在UserAccount模型中。将外键的名称附加到belongsTo()参数以指定外键的名称。
然后,使用书架模型,如下所示:
CalendarEvent
.forge()
.fetchPage({ pageSize: 10, withRelated: ['user'] })
.then(data => {
// Data retrieval
})
.catch(exc => {
// Error management
});fetchPage方法使用page和pageSize创建分页。您将检索一个包含行信息(行数、页码、页面大小、页面总数)的data.pagination对象,data.toJSON()将检索您的模型。
https://stackoverflow.com/questions/36007882
复制相似问题