mcpField
D
drizzle-v1

drizzle-v1

github.com/habibium开发041 次安装39 周前更新
代码仓库

关于 drizzle-v1

drizzle-v1 是将 Drizzle ORM 项目升级到 v1 候选版本的迁移指南,概述迁移命令以及关系定义、数据库设置和查询语法的变化,并说明渐进式升级方式。

主要功能

  1. 01使用 drizzle-kit up 转换迁移目录
  2. 02将关系定义迁移到 defineRelations
  3. 03采用对象式关系查询语法
  4. 04通过 through 定义多对多关系
  5. 05保留 RQB v1 进行渐进迁移

适用场景

  1. 01准备升级 Drizzle ORM
  2. 02更新关系查询和架构关系定义
  3. 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)

迁移期间可继续使用旧语法:

  1. 从 drizzle-orm/_relations 导入
  2. 使用 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