2016-09-22 218 views
1

我想用Expres.jsknex.js两个表格来使用这个表格,它只使用一个get函数,以便在一个HTML模板中使用两个表格中的数据。当我只查询一张表(学校或学生)时,它是有效的,但我不知道如何处理两张表。 有什么建议吗?用knex.js查询多个表

app.get('/schools', function(req, res) { 

    knex.select() 
    .from('schools', 'students') 
    .then(function(schools, students) { 
     res.render('schools', { 
      schools: schools, 
      students: students 
     }); 
    }).catch(function(error) { 
     console.log(error); 
    }); 
}); 

回答

3

你的方法确实有效,不过我建议你这个成语,以避免promise hell(见链接,甚至更好的例子。)

router.get("/schools",function(req,res){ 
    var schools 
    knex("schools").select().then(function(ret){ 
    schools=ret 
    return knex("students").select() 
    }).then(function(students){ 
    res.render("schools",{ 
     students: students, 
     schools: schools 
    }) 
    }) 
}) 
+0

谢谢!它的工作方式与我发布的相同,但结构更好。 – karliatto

4

您需要使用join使用的一些reference key 的基础上多个表下面是在连接两个表参照关键的example

表1:用户和Table 2:

和参考关键是user's primary key

.then(function() { 
    return knex('users') 
    .join('accounts', 'users.id', 'accounts.user_id') 
    .select('users.user_name as user', 'accounts.account_name as account'); 
}) 

希望这可以给你更好的主意。

更多参考看到Docs

+0

谢谢您的回答adbulbarik,但使用加盟我将一起创建一个包含数据的表格,但我想要的是呈现两个表格。可能是我没有正确解释。幸运的是,我发现了这种方式,我会发布它。 – karliatto

1

我找到了解决方案,这个问题和它的工作,只是增加一个新的查询与前一个的。然后和将它作为一个参数,所以我可以使两个表都使用相同的.html并独立使用它们。

knex.select() 
    .from('schools') 
    .then(function(schools){ 
     knex.select() 
     .from('students') 
     .then(function(students) { 
      res.render('schools', { 
       students: students, 
       schools: schools 
      }); 
     }); 
    }).catch(function(error) { 
     console.log(error); 
    });