2017-04-20 59 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