自动分配默认值-Prisma/Next.js 13.4

nkkqxpd9  于 2023-10-18  发布在  其他
关注(0)|答案(2)|浏览(116)

当我添加一个新的电影与形式,我希望它有一个类别的id 'all-films'默认情况下。我该怎么办?先谢了。下面是代码:
新电影.tsx -->

const form = useForm({
    resolver: zodResolver(formSchema),
    defaultValues: {
        id:"",
        name: "",
        imageUrl: "",
        filmUrl: "",
    }
})

const onSubmit = async (values: z.infer<typeof formSchema>) => {
    try {
        await axios.post("/api/films", values)
        
        form.reset()
        router.refresh()
        onClose()
    } catch (error) {
        console.log(error);
    }
}

API/films/route.ts -->

import { db } from "@/lib/db";
import { NextResponse } from "next/server";

export async function POST(req: Request){
    try {
        const { id, name, imageUrl, filmUrl } = await req.json()

        const film = await db.film.create({
            data: {
                id,
                name,
                imageUrl,
                filmUrl
            }
        })

        return NextResponse.json(film)
    } catch (error) {
        console.log("[GAMES_POST]", error);
        return new NextResponse("Internal Error", {status: 500})
    }
}

schema.prisma -->

model Category {
  id String @id
  name String
  imageUrl String @db.Text

  films Film[]

  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

model Film {
  id String @id
  name String
  imageUrl String @db.Text
  filmUrl String @db.Text

  category Category[]

  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

当我添加一个新的电影与形式,我希望它有一个类别的id 'all-films'默认情况下。我该怎么办?先谢了。下面是代码:

avwztpqn

avwztpqn1#

我解决了这个问题如下:

const film = await db.film.create({
        data: {
            id,
            name,
            imageUrl,
            filmUrl,
            category: {
                connect: { id: 'all-films' }
            }
        }
    })
u5i3ibmn

u5i3ibmn2#

最简单的解决方案是编辑POST函数,并将其作为一个新参数填充:

const categoryId = "all-films"
const film = await db.film.create({
  data: {
    id,
    categoryId,
    name,
    imageUrl,
    filmUrl
    }
  })

如果你想让用户能够选择一个类别,并预先填写它,你需要展开你的表单,然后添加一个默认值(你已经有一些空的,它似乎):

const form = useForm({
    resolver: zodResolver(formSchema),
    defaultValues: {
        id:"",
        categoryId: "all-films",
        name: "",
        imageUrl: "",
        filmUrl: "",
    }
})

相关问题