2015-04-06 65 views
1

我正在嘗試使用Sequelize形成一個查詢來加入並選擇+限制。讓我來說明問題:續集加入並限制

我有一個多對多的關係:Book - Reader。讀者可以有很多書,一本書可以有很多讀者。

鑑於Book的ID,我想翻閱其所有Reader s。 這是我目前嘗試過的,它有一些問題。首先,分頁不起作用。其次它仍然選擇Book以及Reader的所有屬性,當我只需要Reader(我扔掉了所有的Book)。

/** 
* Get all Readers of a Book. 
* 
* @param {Number} bookId id of the book 
* @param {Number} limit number of readers to retrieve 
* @param {Number} offset number of readers to skip 
* @return {Promise} contains an array of readers 
*/ 
function getBookReaders(bookId, limit, offset) { 
    return Book.findOne({ 
    id: bookId, 
    include: [Reader], 
    limit: 10, 
    offset: 30 
    }).then(function(book) { 
    return book.readers; 
    }); 
} 

關於如何正確構建此查詢的任何建議?

回答

0

我不知道這是否實際工作,但它將使感覺發揮到極致應用到模型,你要限制:

Book.findOne({ 
    id: bookId, 
    include: [ { model: Reader, limit: 10, offset: 30 } ] 
}).then(function(book) { 
    return book.readers; 
}); 
+0

仍然抵消了極限/沒有工作,這個API文檔](http://docs.sequelizejs.com/en/latest/api/model/#findalloptions-queryoptions-promisearrayinstance)不要列出嵌套包含模型的限制/偏移選項 –

+0

是的。似乎有一個功能要求,但現在似乎沒有任何方式不這樣做,沒有兩次查詢。但既然你知道引用,你可以使兩個查詢與Promise.all()並行運行。 –

+0

對不起,沒有按照,我怎麼會並行?這是一個多對多的模型,所以我需要連接表來獲取所有'Reader'的ID /我無法直接查詢'Reader'表。 –