NextJs基础-动态博客(二)
Next使用Prisma建立数据库
当你安装好prisma的时候,就可以开始建模了。此时你会发现有一个prisma/schema.prisma文件。而且你还连接了dev.db的数据库。这时候就可以建一个基础的模型了。在上一章可以看出我们创建的是一个SQLite的数据库。它是一个轻量级的数据库,作为个人开发学习来说已经能满足需求了(如果你会MySQL,也很好,只需要连接,连接后通过建模自动生成SQL语句)。
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
}
这是官网提供的一个例子,每一个model都是一张表。你可以使用任何一个字段作为主键,这里用的是id,作为主键后面一定要标识@id。
// 对于这样一行
// id ==字段 Int ==数据类型 @id ==主键 @default(autoincrement()) ==默认值
这时候你会发现你虽然连接了数据库dev.db,但是这个文件并没有出现你可以通过npx prisma db push来生产数据库文件。(如果你的已经在数据库里存数据,但是又想修改模型,这是一个很可怕的事,你需要将数据库删除重新生成,你存的数据也不复存在)
npx prisma db push这行命令固然好用,但是官网推荐你用npx prisma migrate dev --name init这个命令。这是一个类似git的管理类命令,可以对SQL文件进行迁移。如果你的项目很大,建议使用这个命令,我并没有深入探索,就不发言了。
接下来就可以操作数据库的文件了。
Next 通过Prisma增删改查
next通过api路由进行后端操作,俗称写接口,这里面第三章有讲到。
我们先假设一个场景。
假设你有一个表名称为sheetA,里面有三个字段,理解不了想一想excel。这三个字段分别是id,name,color。因为这三个字段都是建模中建好的,所以无法更改。每条数据都会包含a,b,c三个字段。
查
其中id字段存了1,2,3三个数,我们想根据2数字获取它整条数据。
import {prisma} from "@/db"
const GET = async() =>{
//操作prisma是异步操作,注意使用await
let data = await Prisma.sheetA.findUnique({
where:{
id:2
}
})
}
这个时候,这一条数据就被查找出来了。是不是很简单,函数部分只用到了findUnique方法,这个方法是查找单条数据的,更多的方法在Prisma官方文档的api里,这里不做赘述。
增
增加也同样简单,不过增加肯定会是一个post请求,因为要携带数据。前端传入参数向api路由,api路由收到后,对其进行加工处理,然后操作数据库。假如我们需要对sheetA增加一条数据,那么必须包含三个字段。这三个字段我们定义为id:4,name:张三,color:green
import {prisma} from "@/db"
const POST = async (request) =>{
let req = await request.json()
let {id,name,color} = req
await Prisma.sheetA.create({
data:{id,name,color}
})
}
这个时候就增加好了
删
删除也很简单,只需传入id就可以
const POST = async (request) =>{
let req = await request.json()
await Prisma.sheetA.delete({
where:req.id
})
}
删除很简单,但是如果在联表的情况下,需要将与之相连的部分清除掉,这里可以用Prisma提供的update的方法,清除联表中的数据。
改
改的话需要传入id和改动的内容,比如要把id为2的信息改为id:2,name:李四,color:bule。
const POST = async (request) =>{
let req = await request.json()
let {id,name,color} = req
await Prisma.sheetA.update({
where:id,
data:{
id,name,color
}
})
}
此时你已经能完成一个真正的接口。
使用prisma操作数据库非常方便,里面踩坑最多的地方是设计联表,如果有时间我会单独写一篇关于Prisma的联表设计思路与操作。