📜  如何使用 knex 查询和连接两个表 (1)

📅  最后修改于: 2023-12-03 15:23:56.158000             🧑  作者: Mango

如何使用 knex 查询和连接两个表

在开发过程中,经常需要查询多个表并进行连接操作。Knex.js是一个流行的Node.js SQL查询构建器,它可以让我们方便地与数据库进行交互。在这篇文章中,我们将讨论如何使用Knex.js连接两个表并执行查询操作。

准备工作

在开始之前,我们需要先安装Knex.js和相应的数据库驱动程序。除此之外,我们还需要创建并填充两个表格。这是我们将要使用的表格:

CREATE TABLE users (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  email VARCHAR(100)
);

CREATE TABLE posts (
  id INT PRIMARY KEY,
  title VARCHAR(100),
  content TEXT,
  user_id INT,
  FOREIGN KEY (user_id) REFERENCES users(id)
);

INSERT INTO users VALUES (1, 'Alice', 'alice@example.com');
INSERT INTO users VALUES (2, 'Bob', 'bob@example.com');
INSERT INTO posts VALUES (1, 'First Post', 'This is my first post', 1);
INSERT INTO posts VALUES (2, 'Second Post', 'This is my second post', 1);
INSERT INTO posts VALUES (3, 'Third Post', 'This is my third post', 2);

这里我们有两个表格:users和posts。表格之间的联系是用户可以发布多篇文章,每篇文章只属于一个用户。

连接两个表格

现在我们的表格已经准备好了,我们可以开始使用Knex.js进行连接。在这里,我们将连接posts表格和users表格,以查找由特定用户发布的所有文章。

const knex = require('knex')({
  client: 'mysql',
  connection: {
    host: 'localhost',
    user: 'user',
    password: 'password',
    database: 'my_database'
  }
});

const userId = 1;

knex('posts')
  .join('users', 'posts.user_id', 'users.id')
  .select('posts.title', 'posts.content', 'users.name')
  .where('users.id', userId)
  .then(rows => {
    console.log(rows);
  })
  .catch(error => {
    console.error(error);
  })
  .finally(() => {
    knex.destroy();
  });

在这里,我们使用.join()方法,将posts表格连接到users表格,以便可以使用.where()方法过滤与特定用户ID匹配的文章。我们还使用.select()方法选择要返回的列。

返回数据

当查询完成时,我们使用.then()方法来处理返回的结果。在这个例子中,我们选择了文章的标题、内容和发布者的名称。查询结果将作为一个对象数组返回,每个对象都包含我们选择的列的值。

[
  {
    title: 'First Post',
    content: 'This is my first post',
    name: 'Alice'
  },
  {
    title: 'Second Post',
    content: 'This is my second post',
    name: 'Alice'
  }
]
总结

Knex.js让我们的查询过程变得更加愉快和轻松。它是一个强大的工具,可以让我们轻松地连接多个表格,并进行各种复杂的查询操作。通过牢记本文的内容,我们希望您能够在未来的项目中轻松使用Knex.js完成查询操作。