十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Wasp 0.13 教程:用 Prisma PSL 定义数据库 Entity,从 Task 模型到数据库迁移

Wasp 0.13 教程:用 Prisma PSL 定义数据库 Entity,从 Task 模型到数据库迁移 Wasp 0.13 教程用 Prisma PSL 定义数据库 Entity从 Task 模型到数据库迁移【免费下载链接】waspThe batteries-included full-stack framework for the AI era. Develop JS/TS web apps (React, Node.js, and Prisma) using declarative code that abstracts away complex full-stack features like auth, background jobs, RPC, email sending, end-to-end type safety, single-command deployment, and more.项目地址: https://gitcode.com/GitHub_Trending/wa/wasp本篇技术指南基于 Wasp 官方文档 0.13 版教程第 4 节 04-entities.md讲解如何在 Wasp 应用中定义数据库 Entity以 Todo App 的Task模型为例从在 Wasp 文件里用{psl}标签书写 Prisma Schema LanguagePSL、执行wasp db migrate-dev生成并应用数据库迁移到用wasp db studio可视化检查数据。读完后你能够独立完成“声明 Entity → 同步数据库结构 → 验证表结构”这一完整数据建模闭环并理解 Wasp Entity 与 Prisma 模型之间 1:1 对应的底层机制。需要说明的是本文对应 Wasp 0.13 的教程版本当时应用定义写在main.wasp文件中当前仓库中的示例如examples/tutorials/TodoApp已演进为 TypeScript Specmain.wasp.ts文末会给出两者的对照。EntityWasp 数据模型的基石Entity 是 Wasp 最核心的概念之一用于定义“哪些数据会存入数据库”。每一条entity声明与 Prisma 数据模型Prisma model一一对应Wasp 底层使用 Prisma ORM 实现全部数据库功能Entity 声明只是它之上的一层薄抽象。这意味着你定义 Entity 的唯一前置技能是熟悉Prisma Schema LanguagePSL——一种为声明数据模型而设计的、直观且声明式的语言。你不需要先深入掌握 Prisma 的完整用法因为 Wasp 为 Prisma 的核心能力提供了简单的 API 封装详见 Entities 参考文档。在 Wasp 文件中定义 Task EntityTodo App 围绕“任务”展开因此教程在main.wasp中新增一个Taskentity 声明// ... entity Task {psl id Int id default(autoincrement()) description String isDone Boolean default(false) psl}逐段拆解这条声明entity Task—— 告诉 Wasp 要定义一个名为Task的 Entity即数据库模型。Wasp 会自动创建一张名为tasks的表。{psl ... psl}—— 两个psl标签之间的所有内容Wasp 都按 PSL 解析。这体现了 Wasp “用标签嵌入 DSL” 的文件组织方式Wasp 自身的声明语法和 Prisma 的 PSL 共存于同一文件中各归其位。PSL 部分定义了tasks表的三列字段类型注解语义idIntid default(autoincrement())主键由数据库自增自动生成descriptionString无任务描述文本创建时必填isDoneBooleandefault(false)完成状态创建时若不显式赋值数据库自动写入false其中id标记主键default(autoincrement())让整数主键在前一个最大值上自增default(false)是字段级默认值——三者都是 PSL 中最常用的注解。底层机制Entity 声明如何变成 Prisma 模型Wasp 的生成流程会把你写在{psl}标签内的内容直接落入项目根目录的schema.prisma从而驱动 Prisma Client 的生成与迁移。教程配套的自动化补丁文件 04-entities__prisma-task.patch 展示了这一步的确切结果——在已有的datasource与generator块之后追加model Task { id Int id default(autoincrement()) description String isDone Boolean default(false) }可以看到entity Task {psl ... psl}中的 PSL 内容与schema.prisma中model Task { ... }的花括号内内容完全一致只是外层的entity关键字换成了 Prisma 的model关键字。当前仓库的 TodoApp 示例 schema.prisma 也印证了这一点Task模型的三个字段与教程声明逐字对应仅在此后加入认证功能时追加了与User的关联字段user User? relation(...)和userId Int?。同步数据库结构wasp db migrate-dev声明 Entity 之后必须让数据库的实际结构跟上声明。教程给出的操作流程是若wasp start进程正在运行先将其停止执行wasp db migrate-dev任何时候修改了 Entity 定义都要重复这一步。该命令指示 Prisma 创建一个新的数据库迁移脚本并将其应用到数据库上。迁移脚本会自动放入项目根目录的migrations/文件夹——Entities 参考文档 特别强调这个文件夹应当提交进版本控制因为它是数据库结构演化的历史记录。从 CLI 源码结构看wasp db子命令的实现集中在 Db.hsmigrate-dev与studio等子命令在此处注册并分发最终委托给 Prisma 的 CLI 能力完成迁移与数据浏览。查看数据库wasp db studio迁移完成后运行wasp db studio这会在浏览器中打开一个新页面Prisma Studio供你查看和编辑数据库中的数据。在 0.13 教程的配图中页面左侧列出了刚生成的Task表点击该表即可看到id、description、isDone三列的定义。此时数据库里还没有任何行数据——“即将改变这一点”的正是教程的后续章节。Entity 的后续用法Operations 与 Prisma Client定义了 Entity 只是数据建模的第一步参考文档Entities给出了 Entity 的完整使用路径在 Wasp 文件中创建/更新 Entity运行wasp db migrate-dev同步数据库模型迁移脚本落入migrations/并提交在实现 OperationsQuery 与 Action时通过 Wasp 的 JS API 访问数据库。在 Operations 中使用 Entity是最常见的方式。以教程下一步的getTasksQuery 为例在 Wasp 文件的query声明中通过entities: [Task]声明依赖Taskentity 后Wasp 会在 Query 函数的context中注入Task的 Prisma client实现里直接调用export const getTasks async (args, context) { return context.entities.Task.findMany({ orderBy: { id: asc }, }) }直接使用 Prisma Client则是需要更细粒度控制时的兜底方案Prisma Client 只能用在 Wasp 的服务端代码中导入方式为import { prisma } from wasp/server prisma.task.create({ description: Read the Entities doc, isDone: true })官方建议优先使用 Wasp 提供的惯用机制只有在 Wasp 未覆盖你的需求时才直接使用 Prisma Client。版本演进对照从 main.wasp 到 main.wasp.ts需要注意的适用前提本文对应 0.13 版教程当时应用定义写在main.wasp文件中Query/Action 以query getTasks { fn: import { getTasks } from src/queries, entities: [Task] }的形式声明。当前仓库的示例已迁移到 TypeScript Spec 写法TodoApp 的 main.wasp.ts 中同样的“声明操作依赖 Task 实体”变成了显式的配置参数spec: [ query(getTasks, { entities: [Task] }), action(createTask, { entities: [Task] }), action(updateTask, { entities: [Task] }), ],entities字段的语义保持一致告诉 Wasp 该操作读写了哪些 Entity从而注入对应的 Prisma client并让 Wasp 在数据变更时自动刷新相关 Query 的客户端缓存。数据建模的核心工作流——PSL 定义 Entity、wasp db migrate-dev迁移、wasp db studio验证——在两个版本间保持不变。小结Entity 声明与 Prisma model 一一对应PSL 写在{psl psl}标签内Wasp 自动建表Task→tasks表每次修改 Entity 定义后必须运行wasp db migrate-dev迁移脚本生成于migrations/目录并提交版本控制wasp db studio提供浏览器内数据查看与编辑是验证表结构的直观手段Entity 主要经由 Operations 的context.entities.X访问必要时在服务端代码直接import { prisma } from wasp/server。掌握以上内容后下一步自然衔接教程第 5 节“Querying the Database”05-queries.md把刚建好的Task表真正读写起来。【免费下载链接】waspThe batteries-included full-stack framework for the AI era. Develop JS/TS web apps (React, Node.js, and Prisma) using declarative code that abstracts away complex full-stack features like auth, background jobs, RPC, email sending, end-to-end type safety, single-command deployment, and more.项目地址: https://gitcode.com/GitHub_Trending/wa/wasp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表