2016-03-15 88 views
1

我如何實現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' 
}); 

回答

1

以下關係如果你想獲得,準確的風格查詢,您可以使用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,只是增加了那些爲了好玩)

這也許可以完全做到這一點在書架,但是我不知道怎麼的時刻。

0

我想你找到了解決方案,因爲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()將檢索您的模型。