drizzle-v1
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseDrizzle ORM v1 RC Upgrade Guide
Drizzle ORM v1 RC 升级指南
Installation
安装
bash
npm i drizzle-orm@beta drizzle-kit@beta -Dbash
npm i drizzle-orm@beta drizzle-kit@beta -DUpgrade Steps
升级步骤
Step 1: Run drizzle-kit up
drizzle-kit up步骤1:运行drizzle-kit up
drizzle-kit upMigrate previous migrations folder to new format (removes , groups SQL files and snapshots):
journal.jsonbash
npx drizzle-kit up将之前的迁移文件夹迁移为新格式(移除,对SQL文件和快照进行分组):
journal.jsonbash
npx drizzle-kit upStep 2: Update Relational Queries to v2
步骤2:将Relational Queries更新至v2版本
See references/relational-queries-v2.md for complete migration patterns.
完整的迁移方案请查看references/relational-queries-v2.md。
Quick Reference: Key Changes
快速参考:主要变更
Relations Definition
关联定义
v1 - Separate calls for each table:
relations()typescript
import { relations } from "drizzle-orm/_relations"; // Note: moved import
export const usersRelation = relations(users, ({ one, many }) => ({
posts: many(posts),
}));v2 - Single for all tables:
defineRelations()typescript
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版本 - 每个表单独调用:
relations()typescript
import { relations } from "drizzle-orm/_relations"; // 注意:导入路径已变更
export const usersRelation = relations(users, ({ one, many }) => ({
posts: many(posts),
}));v2版本 - 为所有表调用一次:
defineRelations()typescript
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,
}),
},
}));Database Instance
数据库实例
v1:
typescript
const db = drizzle(url, { schema, mode: "planetscale" });v2 - No needed, use :
moderelationstypescript
import { relations } from './relations';
const db = drizzle(url, { relations });v1版本:
typescript
const db = drizzle(url, { schema, mode: "planetscale" });v2版本 - 无需,使用:
moderelationstypescript
import { relations } from './relations';
const db = drizzle(url, { relations });Queries
查询语句
v1 - Function-based /:
whereorderBytypescript
await db.query.users.findMany({
where: (users, { eq }) => eq(users.id, 1),
orderBy: (users, { asc }) => [asc(users.id)],
});v2 - Object-based syntax:
typescript
await db.query.users.findMany({
where: { id: 1 },
orderBy: { id: "asc" },
});v1版本 - 基于函数的/:
whereorderBytypescript
await db.query.users.findMany({
where: (users, { eq }) => eq(users.id, 1),
orderBy: (users, { asc }) => [asc(users.id)],
});v2版本 - 基于对象的语法:
typescript
await db.query.users.findMany({
where: { id: 1 },
orderBy: { id: "asc" },
});Many-to-Many with through
through使用through
实现多对多关联
throughv2 (new feature):
typescript
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),
}),
},
}));v2版本(新功能):
typescript
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),
}),
},
}));Partial Upgrade (Keep RQB v1)
部分升级(保留RQB v1版本)
Use old syntax while migrating gradually:
- Import from
drizzle-orm/_relations - Use instead of
db._querydb.query
逐步迁移时可继续使用旧语法:
- 从导入
drizzle-orm/_relations - 使用替代
db._querydb.query
v2 Filter Operators
v2版本过滤操作符
Object-based filters with , , , :
ANDORNOTRAWtypescript
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'` },
],
},
});支持、、、的基于对象的过滤:
ANDORNOTRAWtypescript
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'` },
],
},
});New Features in v2
v2版本新功能
- - Make relation required at type level
optional: false - - Direct many-to-many without manual junction table queries
through - Predefined filters - in relation definition
where - Relation filtering - Filter parent by child properties
- Offset on related objects - Pagination in nested relations
- - 在类型层面强制关联为必填项
optional: false - - 无需手动查询关联表即可直接实现多对多关联
through - 预定义过滤器 - 在关联定义中设置条件
where - 关联过滤 - 通过子属性过滤父对象
- 关联对象偏移量 - 嵌套关联中的分页功能