2016-09-22 220 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); 
    });