使用knex.js查询多个表

时间:2016-09-22 05:56:01

标签: javascript mysql node.js express knex.js

我想使用Expres.jsknex.js两个表进行渲染,只使用一个get函数,以便在一个HTML模板中使用两个表中的数据。当我只查询一个表(学校或学生)但我不知道如何处理两个表时,它可以工作。 有什么建议吗?

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 个答案:

答案 0 :(得分:5)

您需要使用join根据某些reference key使用多个表格 以下是使用引用键

连接两个表的example

表1:用户和表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

答案 1 :(得分: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
    })
  })
})

答案 2 :(得分:1)

我找到了问题的解决方案并且它正在工作,只是将新查询添加到前一个的.then并将其作为参数传递,这样我就可以将两个表都渲染为相同的.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);
    });