mysql - BookShelf or MySQL如何选择column1-column2作为别名

标签 mysql knex.js bookshelf.js

在一个原始的 MySQL 查询中,我有这样的东西:

Select total_sales - over_head_costs As net_sales from departments;

如何使用 BookShelf/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());
  },
});

最佳答案

Bookshelf 没有此功能,但它为此提供了一个插件:Virtuals .无需安装任何东西,您只需在使用 bookshelf.plugin('virtuals') 加载 Bookshelf 后立即加载它。

您的模型应该如下所示:

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());
  },
});

关于mysql - BookShelf or MySQL如何选择column1-column2作为别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43510315/

相关文章:

mysql - 多重定义错误

mysql - 按列中的值显示列中的值

javascript - Node.js 和 JSON : Accessing object properties

MySql - 字段 'park_id' 没有默认值

java - 从JAVA中的各种JCheckboxes在mysql中输入各种值

php - Yii CAdvancedArBehavior 无法在加载后立即保存具有关系的模型

javascript - 如何使用 Knex.js 和 Bookshelf.js (Express JS/Postgres) 插入一对多

mysql - Knex SQL 查询不返回任何内容,MySQL Workbench 返回正确的数据

sql - 在 Knex 中为表别名

javascript - 尝试使用 Bookshelf.js 清理 Node.js 中的嵌套 Promise 链