加盟bookshelf.js
问题描述:
我如何实现bookshelf.js加盟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'
});
答
以下关系如果你想获得,准确的风格查询,您可以使用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();
(你不需要的。哪里或.andWhere,只是增加了那些为了好玩)
这也许可以完全做到这一点在书架,但是我不知道怎么的时刻。
答
我想你找到了解决方案,因为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'
});
使用属于关联()方法,因为外键是在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()
将检索您的模型。