2016-03-16 34 views
1

我有兩個表。一個是分類表,另一個是項目表的外鍵類別(一類可以有多個項目)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()); 
} 

回答

1

通過使用別名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')