首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加入bookshelf.js

加入bookshelf.js
EN

Stack Overflow用户
提问于 2016-03-15 17:55:37
回答 2查看 3.2K关注 0票数 1

如何在bookshelf.js中实现以下关系

代码语言:javascript
复制
SELECT user_accounts.user_id,  `event_id` 
FROM  `calendar_events` 
JOIN user_accounts ON user_accounts.user_id = calendar_events.`created_by` 
LIMIT 10

我的模型

代码语言:javascript
复制
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'
});
EN

回答 2

Stack Overflow用户

发布于 2016-05-04 14:18:45

如果您想获得确切样式查询,可以使用knex查询构建器,并尝试构建一个符合您需要的查询

我还没有测试过,但应该是这样的

代码语言:javascript
复制
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,添加它们只是为了好玩)

完全在书架上做可能是可能的,但目前我不确定如何做。

票数 3
EN

Stack Overflow用户

发布于 2018-02-20 18:39:59

我想你从2016年就找到了解决方案,但这是答案

代码语言:javascript
复制
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()参数以指定外键的名称。

然后,使用书架模型,如下所示:

代码语言:javascript
复制
CalendarEvent
    .forge()
    .fetchPage({ pageSize: 10, withRelated: ['user'] })
    .then(data => {
        // Data retrieval
    })
    .catch(exc => {
        // Error management
    });

fetchPage方法使用pagepageSize创建分页。您将检索一个包含行信息(行数、页码、页面大小、页面总数)的data.pagination对象,data.toJSON()将检索您的模型。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36007882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档