加盟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方法使用pagepageSize创建一个分页。您将检索包含行信息(行数,页码,页面大小,页面总数)的对象data.pagination,并且data.toJSON()将检索您的模型。