关于 drizzle-v1
drizzle-v1 是将 Drizzle ORM 项目升级到 v1 候选版本的迁移指南,概述迁移命令以及关系定义、数据库设置和查询语法的变化,并说明渐进式升级方式。
主要功能
- 01使用 drizzle-kit up 转换迁移目录
- 02将关系定义迁移到 defineRelations
- 03采用对象式关系查询语法
- 04通过 through 定义多对多关系
- 05保留 RQB v1 进行渐进迁移
适用场景
- 01准备升级 Drizzle ORM
- 02更新关系查询和架构关系定义
- 03从 RQB v1 渐进迁移
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ habibium/ agent-skills --skill drizzle-v1安装后在 Claude Code 中输入/drizzle-v1确认已加载。
附带文件references/relational-queries-v2.md
详细介绍
Drizzle ORM v1 RC 升级指南
安装
npm i drizzle-orm@beta drizzle-kit@beta -D
升级步骤
步骤 1:运行 drizzle-kit up
将旧版迁移文件夹迁移为新格式(删除 journal.json,并对 SQL 文件和快照进行分组):
npx drizzle-kit up
步骤 2:将关系查询更新为 v2
完整的迁移模式请参阅 references/relational-queries-v2.md。
快速参考:主要变更
关系定义
v1 - 每个表分别调用 relations():
import { relations } from "drizzle-orm/_relations"; // Note: moved import
export const usersRelation = relations(users, ({ one, many }) => ({
posts: many(posts),
}));
v2 - 使用单个 defineRelations() 定义所有表:
import { defineRelations } from "drizzle-orm";
import * as schema from "./schema";
export const relations = defineRelations(schema, (r) => ({
users: {
posts: r.many.posts({
from: r.users.id,
to: r.posts.authorId,
}),
},
}));
数据库实例
v1:
const db = drizzle(url, { schema, mode: "planetscale" });
v2 - 无需 mode,使用 relations:
import { relations } from './relations';
const db = drizzle(url, { relations });
查询
v1 - 基于函数的 where/orderBy:
await db.query.users.findMany({
where: (users, { eq }) => eq(users.id, 1),
orderBy: (users, { asc }) => [asc(users.id)],
});
v2 - 基于对象的语法:
await db.query.users.findMany({
where: { id: 1 },
orderBy: { id: "asc" },
});
使用 through 实现多对多关系
v2(新功能):
export const relations = defineRelations(schema, (r) => ({
users: {
groups: r.many.groups({
from: r.users.id.through(r.usersToGroups.userId),
to: r.groups.id.through(r.usersToGroups.groupId),
}),
},
}));
部分升级(保留 RQB v1)
迁移期间可继续使用旧语法:
- 从
drizzle-orm/_relations导入 - 使用
db._query代替db.query
v2 过滤运算符
基于对象的过滤器,支持 AND、OR、NOT、RAW:
await db.query.users.findMany({
where: {
AND: [
{ OR: [{ name: { like: "John%" } }, { name: { ilike: "jane%" } }] },
{ age: { gt: 18 } },
{ NOT: { status: "banned" } },
{ RAW: (t) => sql`${t.createdAt} > NOW() - INTERVAL '30 days'` },
],
},
});
v2 新功能
optional: false- 在类型层面将关系设为必需through- 无需手动查询联结表即可实现直接的多对多关系- 预定义过滤器 - 在关系定义中使用
where - 关系过滤 - 根据子项属性筛选父项
- 关联对象上的偏移量 - 对嵌套关系进行分页
评论
支持 Markdown