
Prisma Client 语法示例
2024年7月27日
JavaScriptTypeScript
基本示例
1. 定义数据模型:
PRISMA1generator client { 2 provider = "prisma-client-js" 3} 4 5datasource db { 6 provider = "postgresql" 7 url = env("DATABASE_URL") 8} 9 10model User { 11 id Int @id @default(autoincrement()) 12 email String @unique 13 name String? 14 createdAt DateTime @default(now()) 15 updatedAt DateTime @updatedAt 16 posts Post[] 17} 18 19model Post { 20 id Int @id @default(autoincrement()) 21 title String 22 content String? 23 published Boolean @default(false) 24 author User @relation(fields: [authorId], references: [id]) 25 authorId Int 26}
- 数据类型:
Int,String,Boolean,DateTime - 字段修饰符:
@id,@unique,@default,@updatedAt,@relation - 关系字段关键字:
fields,references
2. 创建记录:
TS1import { PrismaClient } from '@prisma/client' 2 3const prisma = new PrismaClient() 4 5async function main() { 6 const user = await prisma.user.create({ 7 data: { 8 email: 'alice@example.com', 9 name: 'Alice', 10 posts: { 11 create: { 12 title: 'Hello World', 13 content: 'My first post!', 14 }, 15 }, 16 }, 17 }) 18 console.log(user) 19} 20 21main() 22 .catch((e) => { 23 throw e 24 }) 25 .finally(async () => { 26 await prisma.$disconnect() 27 })
- 使用
prisma.user.create()方法创建 User 记录。 - 使用
create嵌套对象创建关联的 Post 记录。
3. 查询记录:
TS1// ... 2 3async function main() { 4 // 获取所有用户 5 const allUsers = await prisma.user.findMany() 6 7 // 获取特定用户及其帖子 8 const userWithPosts = await prisma.user.findUnique({ 9 where: { email: 'alice@example.com' }, 10 include: { posts: true }, 11 }) 12 13 console.log(allUsers, userWithPosts) 14} 15 16// ...
- 使用
prisma.user.findMany()方法获取所有 User 记录。 - 使用
prisma.user.findUnique()方法获取特定 User 记录。 - 使用
include选项加载关联的 Post 记录。
4. 更新记录:
TS1// ... 2 3async function main() { 4 // 更新用户名称 5 const updatedUser = await prisma.user.update({ 6 where: { email: 'alice@example.com' }, 7 data: { name: 'Alice Lee' }, 8 }) 9 10 console.log(updatedUser) 11} 12 13// ...
- 使用
prisma.user.update()方法更新 User 记录。 - 使用
where选项指定要更新的记录。 - 使用
data选项设置要更新的字段值。
5. 删除记录:
TS1// ... 2 3async function main() { 4 // 删除特定用户 5 const deletedUser = await prisma.user.delete({ 6 where: { email: 'alice@example.com' }, 7 }) 8 9 console.log(deletedUser) 10} 11 12// ...
- 使用
prisma.user.delete()方法删除 User 记录。 - 使用
where选项指定要删除的记录。
多表查询
1. 一对多关系查询 (User -> Posts):
TS1// 获取单个用户及其所有帖子 2const userWithPosts = await prisma.user.findUnique({ 3 where: { id: 1 }, 4 include: { posts: true }, 5}); 6 7// 获取所有用户及其帖子 8const allUsersWithPosts = await prisma.user.findMany({ 9 include: { posts: true }, 10});
2. 反向一对多关系查询 (Post -> Author):
TS1// 获取单个帖子及其作者信息 2const postWithAuthor = await prisma.post.findUnique({ 3 where: { id: 1 }, 4 include: { author: true }, 5}); 6 7// 获取所有已发布帖子及其作者信息 8const publishedPostsWithAuthors = await prisma.post.findMany({ 9 where: { published: true }, 10 include: { author: true }, 11});
3. 嵌套查询:
TS1// 获取发布了帖子的用户,并包含帖子信息 2const usersWithPublishedPosts = await prisma.user.findMany({ 3 where: { 4 posts: { 5 some: { published: true }, 6 }, 7 }, 8 include: { 9 posts: true, 10 }, 11});
4. 分页:
TS1// 获取第一页的用户及其帖子 (每页 10 个用户) 2const firstPageUsersWithPosts = await prisma.user.findMany({ 3 include: { posts: true }, 4 take: 10, 5 skip: 0, 6}); 7 8// 获取第二页的用户及其帖子 9const secondPageUsersWithPosts = await prisma.user.findMany({ 10 include: { posts: true }, 11 take: 10, 12 skip: 10, 13});
5. 排序:
TS1// 按创建时间降序获取帖子及其作者 2const postsSortedByDate = await prisma.post.findMany({ 3 include: { author: true }, 4 orderBy: { createdAt: "desc" }, 5});
0
Likes


