Lucid

Lucid ORM

Lucid 是一个 SQL 查询构建器,也是由 AdonisJS 核心团队创建并维护的、构建于 Knex 之上的 Active Record ORM。Lucid 致力于充分发挥 SQL 的全部潜力,并为众多高级 SQL 操作提供简洁的 API。

Lucid 的文档位于 https://lucid.adonisjs.com

为何选择 Lucid

以下是我们精心挑选的一些 Lucid 特性。

  • 构建于 Knex 之上的流畅查询构建器。
  • 支持读写分离副本与多连接管理。
  • 遵循活动记录模式(active record pattern)的基于类的模型(处理关联关系、序列化与钩子)。
  • 迁移系统,通过增量变更集(changeset)修改数据库结构。
  • 模型工厂,用于为测试生成假数据。
  • 数据库种子(seeder),用于向数据库插入初始/虚拟数据。

除此之外,以下是在 AdonisJS 应用中使用 Lucid 的其他理由。

  • 我们为 Lucid 与 Auth 软件包、校验器提供了开箱即用的深度集成。因此,你无需自己编写这些集成。

  • Lucid 已预先配置在 apiweb 启动套件中,为你的应用提供良好的起步基础。

  • Lucid 的主要目标之一便是充分发挥 SQL 的全部潜力,并支持许多高级 SQL 操作,如窗口函数(window functions)递归 CTEJSON 操作行级锁(row-based locks) 等等。

  • Lucid 和 Knex 都已存在多年。因此,与许多其他新兴的 ORM 相比,它们已经相当成熟且久经考验。

话虽如此,AdonisJS 并不会强制你使用 Lucid。只需卸载该软件包并安装你选择的 ORM 即可。

安装

使用以下命令安装并配置 Lucid。

node ace add @adonisjs/lucid
  1. adonisrc.ts 文件中注册以下服务提供者。

    {
    providers: [
    // ...其他 providers
    () => import('@adonisjs/lucid/database_provider'),
    ]
    }
  2. adonisrc.ts 文件中注册以下命令。

    {
    commands: [
    // ...其他 commands
    () => import('@adonisjs/lucid/commands'),
    ]
    }
  3. 创建 config/database.ts 文件。

  4. 为所选方言定义环境变量及其校验规则。

  5. 安装所需的对等依赖(peer dependencies)。

创建你的第一个模型

配置完成后,你可以使用以下命令创建你的第一个模型。

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: '[email protected]',
})
/**
* 通过主键查找用户
*/
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 操作的信息。

了解更多