Knex Js从原始SQL返回不同的输出

我有两张桌子。 一个是分类表,另一个是一个项目表,带有一个外键来分类(一个分类可以有多个项目)

我试图从下面的代码公开所有项目

router.route('/projects') .get(function(req,res){ //knex('projects').select(['projects.id','projects.name','projects.category_id','categories.name']).innerJoin('categories','projects.category_id','categories.id') knex.from('projects').innerJoin('categories','projects.category_id','categories.id') .then(function(collection){ console.log(collection); res.json({ error:false, data: collection }) }) .catch(function(err){ res.json({ error:true, data:{ message:err.message } }) }) }) 

两个knex语句几乎都返回类似于下面的截断输出

 { "error": false, "data": [ { "id": 1, "name": "Music", "category_id": 1, "created_at": 1458126413858 }, { "id": 2, "name": "Science", "category_id": 2, "created_at": 1458126413858 } ] } 

但是,原始的SQL似乎是正确的

 select * from "projects" inner join "categories" on "projects"."category_id" = "categories"."id" 

要么

 select "projects"."id", "projects"."name", "projects"."category_id", "categories"."name" from "projects" inner join "categories" on "projects"."category_id" = "categories"."id" 

在sqlite上单独运行上面的语句似乎返回整个表结果

我在哪里会出现错误的knex声明?

作为参考,这是模式

项目表

 var table = (table) => { table.increments().primary(); table.string('name'); table.integer('category_id').references('categories.id'); table.timestamp('created_at').defaultTo(Date.now()); } 

分类表

 var table = (table) => { table.increments().primary(); table.string('name'); table.timestamp('created_at').defaultTo(Date.now()); } 

通过使用下面的columnNames的别名来解决它

 knex('projects').select(['projects.id as projectId','projects.name as projectName','projects.category_id','categories.name as categoryName']).innerJoin('categories','projects.category_id','categories.id')