Lucid ORM
Lucid 是一个 SQL 查询构建器,同时也是一个基于 Knex 构建的 Active Record ORM,由 AdonisJS 核心团队创建和维护。Lucid 致力于充分发挥 SQL 的潜力,并为许多高级 SQL 操作提供简洁的 API。
Lucid 的文档可在 https://lucid.adonisjs.com 查看。
为什么选择 Lucid
以下是 Lucid 的一些精选功能。
- 基于 Knex 的一个流畅的查询构建器。
- 支持读写分离和多个连接管理。
- 采用类结构的模型,遵循 active record 模式(处理关系、序列化和钩子)。
- 迁移系统支持通过增量变更集来更改数据库结构。
- 采使用模型工厂生成测试用的模拟数据。
- 使用数据库填充器向数据库插入初始/模拟数据。
除此之外,以下是在 AdonisJS 应用中使用 Lucid 的其他原因。
-
我们为 Lucid 提供了与 Auth 包和验证器的一流集成。因此,你无需自行编写这些集成代码。
-
Lucid 自带
api
和web
启动套件,为您的应用程序开发提供良好开端。 -
Lucid 的主要目标之一是充分发挥 SQL 的潜力,并支持许多高级 SQL 操作,如 窗口函数、递归 CTE、JSON 操作、基于行的锁等。
-
Lucid 和 Knex 都历经多年发展,相较于许多新兴的 ORM,它们更为成熟可靠。
话虽如此,AdonisJS 并不强制你使用 Lucid。你可以卸载该包并安装你选择的 ORM。
安装
使用以下命令安装并配置 Lucid。
node ace add @adonisjs/lucid
-
在
adonisrc.ts
文件中注册以下服务提供者。{providers: [// ...其他提供者() => import('@adonisjs/lucid/database_provider'),]} -
在
adonisrc.ts
文件中注册以下命令。{commands: [// ...其他命令() => import('@adonisjs/lucid/commands'),]} -
创建
config/database.ts
文件。 -
为所选方言定义环境变量及其验证。
-
安装所需的同等依赖项。
创建你的第一个模型
配置完成后,你可以使用以下命令创建第一个模型。
node ace make:model User
此命令将在 app/models
目录中创建一个新文件,内容如下。
import { DateTime } from 'luxon'
import { BaseModel, column } from '@adonisjs/lucid/orm'
export default class User extends BaseModel {
@column({ isPrimary: true })
declare id: number
@column.dateTime({ autoCreate: true })
declare createdAt: DateTime
@column.dateTime({ autoCreate: true, autoUpdate: true })
declare updatedAt: DateTime
}
有关模型的更多信息,请访问 官方文档。
迁移
迁移是一种使用增量变更集修改数据库结构和数据的方法。你可以使用以下命令创建新的迁移。
node ace make:migration users
此命令将在 database/migrations
目录中创建一个新文件,内容如下。
import { BaseSchema } from '@adonisjs/lucid/schema'
export default class extends BaseSchema {
protected tableName = 'users'
async up() {
this.schema.createTable(this.tableName, (table) => {
table.increments('id')
table.timestamp('created_at')
table.timestamp('updated_at')
})
}
async down() {
this.schema.dropTable(this.tableName)
}
}
你可以使用以下命令运行所有待处理的迁移。
node ace migration:run
有关迁移的更多信息,请访问 官方文档。
查询构建器
Lucid 附带了一个基于 Knex 构建的流畅的查询构建器。你可以使用查询构建器对数据库执行 CRUD 操作。
import db from '@adonisjs/lucid/services/db'
/**
* 创建查询构建器实例
*/
const query = db.query()
/**
* 创建查询构建器实例并选择表
*/
const queryWithTableSelection = db.from('users')
查询构建器也可以限定于模型实例。
import User from '#models/user'
const user = await User.query().where('username', 'rlanz').first()
有关查询构建器的更多信息,请访问 官方文档。
CRUD 操作
Lucid 模型具有内置方法,可以对数据库执行 CRUD 操作。
import User from '#models/user'
/**
* 创建新用户
*/
const user = await User.create({
username: 'rlanz',
email: 'romain@adonisjs.com',
})
/**
* 按主键查找用户
*/
const user = await User.find(1)
/**
* 更新用户
*/
const user = await User.find(1)
user.username = 'romain'
await user.save()
/**
* 删除用户
*/
const user = await User.find(1)
await user.delete()
有关 CRUD 操作的更多信息,请访问 官方文档。