0.搭建prisma项目
1.配置env
DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public"
注解:"数据库://用户名:密码@地址:端口号/要连接的数据库"
例:DATABASE_URL="mysql://root:123456@localhost:3306/prismatest2"
2.建表
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql" //这里改自己的数据库
url = env("DATABASE_URL")
}
model user{ //建一个user表
id Int @id @default(autoincrement()) @db.UnsignedInt //主键 自增 非负
name String //不可为空
avatar String? //可以为空
createdAt DataTime @default(now()) //日期字段,默认当前日期
updatedAt DateTime @updatedAd //同上
content String @db.Text //文本
}
3.运行并生成迁移文件
npx prisma migrate dev
Enter a name for the new migration: (写不写都行)
3.5.创建多表关联模型
model user {
id Int @id @default(autoincrement()) @db.UnsignedInt
articles article[]
}
model article {
user user? @relation(fields: [userId], references: [id])
userId Int? @db.UnsignedInt
}
如果关联表里没自动补全代码,终端执行下面的代码
npx prisma format
4.数据填充
package.json配置
"prisma":{
"seed": "ts-node prisma/seed.ts"
},
prisma同级目录下创建seed.ts
seed.ts
import { PrismaClient } from "@prisma/client"
const prisma = new PrismaClient();
async function run(){
await prisma.user.create({
data:{
email:"afafa"
password:"fafaf"
}
})
}
run();
5.使用mock.js进行数据填充
import { PrismaClient } from "@prisma/client"
import { Random } from "mockjs"
const prisma = new PrismaClient();
async function run(){
await prisma.user.create({
data:{
email: Random.string()
password: Random.string()
}
})
}
run();
填充数据输入
npx prisma migrate reset
6.循环创建多个
import { PrismaClient } from "@prisma/client"
import { Random } from "mockjs"
const prisma = new PrismaClient();
async function run(){
for(let i = 0li<29;i++){
await prisma.user.create({
data:{
email: Random.string()
password: Random.string()
}
})
}
}
run();
7.通过helper帮助函数简化操作
可以单独创建一个seeds文件夹,里面就放创建表数据的ts文件
seeds
article.ts
user.ts
seed.ts
然后seed.ts里面写
import { article } from "./seeds/article"
import { user } from "./seeds/user"
async function run(){
user();
article();
}
run()
helper
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
export async function create( count: 1 , callback: (prisma: PrismaClient) => void){
for(let i = 0;i < count;i++){
callback(prisma)
}
}
其他函数调用
import { PrismaClient } from "@prisma/client"
import { Random } from "mockjs"
import { create } from "../helper"
const prisma = new PrismaClient();
async function run(){
create(30 , async (prisma: PrismaClient)=>{
await prisma.user.create({
data:{
email: Random.string()
password: Random.string()
}
})
})
}
run();