2017-06-01 81 views

回答

0

好迴環ORM,因爲這一刻沒有支持它(和它可能永遠也不會),但你總是可以直接使用MySQL驅動程序:

var ids = [4,5,6,7] 
YourModel.dataSource.connector.query('SELECT * FROM something ORDER BY FIELD(id, ?)', ids, (err, results) => { 
    //... 
}); 

但是,如果你想成爲數據庫無關,你可以做到這一點在Javascript:

var ids = [4,5,6,7] 
SomethingModel.find().then(rows => { 
    rows.sort(function (a, b) { 
    return ids.indexOf(a) - ids.indexOf(b); 
    }); 
    //... 
}); 

或爲大型陣列快一點點(通過索引):

var idList = [4,5,6,7]; 
var idMap = {}; 
idList.forEach(function (id, index) { 
    idMap[id] = index; 
}); 
SomethingModel.find().then(rows => { 
    rows.sort(function (a, b) { 
    return idMap[a] - idMap[b]; 
    }); 
    //... 
}); 

如果你在你的代碼的許多地方這樣做,你也可以生活有點危險和猴子補丁connector.buildOrderBy本地做到這一點。

+0

感謝您的回答,一個問題......當我使用原始mysql時,鉤子會發生什麼?我正在使用分頁(+ 1M行)我認爲javascript解決方案不合適(我認爲在Lodash中) – rigobcastro

+0

@rigobcastro因爲很可能你會在遠程方法中調用'connector.query',默認情況下沒有鉤子調用。你可以在遠程方法中做到這一點,但運行鉤子:'SomethingModel.notifyObserversOf('save',context,err => {...})' –