2017-04-20 51 views
1

在原MySQL查詢,我有這樣的事情:書架ORM的MySQL如何選擇列1,列2的別名

Select total_sales - over_head_costs As net_sales from departments; 

我怎樣才能實現與書架/ knex查詢同樣的事情?理想情況下不使用knex.raw。

我嘗試包括以下內容:

let Department = bookshelf.Model.extend({ 
    tableName: 'departments', 
    idAttribute: 'department_id', 
},{ 
    getDepartments: function(){ 
    return this.fetchAll({columns: ['department_id', 'department_name', 'over_head_costs', 'total_sales - over_head_costs AS net_sales']}) 
    .then(models=>models.toJSON()); 
    }, 
}); 

回答

1

書架不具備此功能,但它帶來的一個插件是:Virtuals 。無需安裝任何東西,只需在使用bookshelf.plugin('virtuals')加載書架後立即加載它。

你的模型應該再像:

const Department = bookshelf.Model.extend({ 
    tableName: 'departments', 
    idAttribute: 'department_id', 
    virtuals: { 
    net_sales: function() { 
     return this.get('total_sales') - this.get('over_head_costs'); 
    } 
    } 
},{ 
    getDepartments: function(){ 
    return this.fetchAll({columns: ['department_id', 'department_name', 'over_head_costs', 'net_sales']}) 
    .then(models=>models.toJSON()); 
    }, 
}); 
+0

你會如何闡述「加載它加載的書架後,不是嗎?」 我有這樣的書架'const Bookshelf = require('bookshelf')(knex); Bookshelf.plugin('virtuals'); module.exports = Bookshelf;' 並在一個單獨的文件中,我導入配置。 'const bookshelf = require('../ knex_config.js');' 但是我仍然得到相同的錯誤。 – WABBIT0111

+0

你做得對。這正是我所說的「之後」。你遇到了什麼錯誤? – flaviodesousa

+0

我認爲你仍然無法選擇'net_sales'作爲列。您可以使用model.get('net_sales'),但不能使用列標題。 – WABBIT0111