You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Next.js 13.4与Prisma中自动分配默认分类值

实现默认关联'all-films'分类的步骤

1. 修改API创建逻辑(推荐,更可靠)

直接在后端API层处理关联逻辑,确保所有新创建的电影都会绑定all-films分类,不受前端传参影响:

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()

        // 先确保all-films分类存在,不存在则自动创建
        await db.category.upsert({
            where: { id: 'all-films' },
            update: {},
            create: {
                id: 'all-films',
                name: '所有电影',
                imageUrl: '替换为你的分类图片链接'
            }
        })

        const film = await db.film.create({
            data: {
                id,
                name,
                imageUrl,
                filmUrl,
                // 关联已存在的all-films分类
                category: {
                    connect: { id: 'all-films' }
                }
            }
        })

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

2. (可选)前端表单显式携带默认分类

如果需要前端表单也默认包含该分类(比如后续扩展多选分类功能),可以修改前端代码:

首先更新表单默认值(需确保formSchema已添加categoryIds字段,例如z.array(z.string()).default(['all-films'])):

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

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接收逻辑:

export async function POST(req: Request){
    try {
        const { id, name, imageUrl, filmUrl, categoryIds = ['all-films'] } = await req.json()

        // 确保默认分类存在
        await db.category.upsert({
            where: { id: 'all-films' },
            update: {},
            create: {
                id: 'all-films',
                name: '所有电影',
                imageUrl: '替换为你的分类图片链接'
            }
        })

        const film = await db.film.create({
            data: {
                id,
                name,
                imageUrl,
                filmUrl,
                category: {
                    connect: categoryIds.map(id => ({ id }))
                }
            }
        })

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

内容的提问来源于stack exchange,提问作者co-flow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 19:49:51