📅  最后修改于: 2023-12-03 14:59:11.957000             🧑  作者: Mango
Adonis.js 是用于构建 Node.js Web 应用程序的 MVC 框架。在 Adonis.js 中,有两个非常常用的方法:count()
和 where()
。count()
方法用于计算给定表中满足特定条件的行数,而 where()
方法用于与数据库中的数据进行筛选。在本文中,我们将深入了解如何在 Adonis.js 中使用这两个方法。
在开始之前,请确保已经在您的系统中安装了 Node.js 和 npm。如果没有,请按照官方文档中的指示进行安装:https://nodejs.org
要安装 Adonis.js,请运行以下命令:
npm i -g @adonisjs/cli
在使用 count()
和 where()
方法之前,我们需要先连接到数据库。Adonis.js 支持多种类型的数据库,比如 MySQL、PostgreSQL、SQLite 等。
在这个例子中,我们将连接到 SQLite 数据库。请确保您已经在您的项目目录下安装了 sqlite3 模块:
npm i --save sqlite3
然后打开 .env
文件并添加以下内容:
DB_CONNECTION=sqlite
DB_DATABASE=./my_database.sqlite
这意味着我们将使用 SQLite 数据库,并将数据库文件存储在根目录下的 my_database.sqlite
文件中。
现在,我们需要创建一个模型和迁移,以便我们可以与数据库进行交互。运行以下命令来创建一个名为 User
的模型和迁移:
adonis make:model User -m
这将创建一个 User.js
文件和一个名为 xxxxxx_create_users.js
的迁移文件。
在 xxxxxx_create_users.js
迁移文件中,我们将定义 users
表的结构。打开文件并将以下内容添加到 up()
方法中:
this.create('users', (table) => {
table.increments('id')
table.string('username').unique()
table.string('email').unique()
table.string('password')
table.timestamps()
})
这将创建一个 users
表,包含 id
、username
、email
、password
和 timestamps
字段。
现在,我们需要运行迁移并将表设置为模型:
adonis migration:run
const User = use('App/Models/User')
count()
方法用于计算给定表中满足特定条件的行数。默认情况下,count()
返回的是整个表的行数。要计算仅满足特定条件的行数,我们可以在 count()
方法中传入一个 where
子句。
以下是一个例子:
const allUsers = await User.query().count()
console.log(allUsers[0]['count(*)']) // 输出表中所有用户的数量
const activeUsers = await User.query().where('is_active', true).count()
console.log(activeUsers[0]['count(*)']) // 输出表中所有已激活用户的数量
在上面的代码中,我们首先使用 count()
方法获取 users
表中的所有行数,然后使用 where()
方法计算仅满足 is_active = true
条件的行数。在执行查询之后,我们可以访问结果数组中的 count(*)
键来获取行数。
where()
方法用于与数据库中的数据进行筛选。可以使用多个 where()
子句来对表中的数据进行更复杂的筛选。
以下是一个例子:
const users = await User.query()
.where('username', 'like', 'joh%')
.orWhere('email', 'like', 'joh%')
.orderBy('created_at', 'desc')
.limit(10)
.fetch()
在上面的代码中,我们使用 where()
方法对 users
表进行筛选,以查找包含用户名或电子邮件地址以 joh
开头的前 10 个用户。我们还使用 orderBy()
方法按照 created_at
字段的值进行倒序排序。
在本文中,我们介绍了 Adonis.js 框架中的两个非常常用的方法:count()
和 where()
。使用这两个方法,我们可以轻松地从数据库中获取我们需要的数据。如果您还没有使用 Adonis.js,我强烈建议您尝试一下!