Node.js Knex Js从原始SQL返回不同的输出
我有两张桌子。一个是类别表,另一个是带有类别外键的项目表(一个类别可以有多个项目) 我试图公开下面代码中的所有项目Node.js Knex Js从原始SQL返回不同的输出,node.js,sqlite,express,knex.js,Node.js,Sqlite,Express,Knex.js,我有两张桌子。一个是类别表,另一个是带有类别外键的项目表(一个类别可以有多个项目) 我试图公开下面代码中的所有项目 router.route('/projects') .get(function(req,res){ //knex('projects').select(['projects.id','projects.name','projects.category_id','categories.name']).innerJoin('categories','projects.cat
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"
或
在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());
}
通过对列名使用别名解决了此问题,如下所示
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')
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')