Necesito ayuda para solucionar este error. Tengo una relación de uno a muchos que dicta todos los comentarios/hijos que tendrá una publicación. ver esquema a continuación.
model Post { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) description String postedBy User? @relation(fields: [postedById], references: [id]) postedById Int? votes Vote[] comments Post[] @relation(name: "comment") parent Post? @relation(name: "comment", fields: [parentId], references: [id]) parentId Int? @default(0) } Como puede ver, el valor predeterminado de parentId es cero. Siempre quiero que la publicación raíz tenga un parentId de cero para indicar que es una publicación raíz porque no hay Publicación con Id 0 para que la clave externa haga referencia.
Cuando agregué la relación uno-muchos-uno mismo con el valor predeterminado 0, mi prisma se completó correctamente, ignorando los errores de clave externa en mi base de datos como se ve a continuación.
¿El campo principal es nulo? o indefinido? porque parentId = 0 no existe. Eso es bueno porque esas son publicaciones raíz. El problema es que cuando trato de hacer una mutación posterior usando gql, obtengo un error de clave externa porque no hay una publicación con id 0. Vea la mutación a continuación.
const { userId, prisma } = context; if (userId === null) throw new Error("Not Authenticated"); const newPost = await prisma.post.create({ data: { description: args.description, postedBy: { connect: { id: userId } }, parent: { connect: { id: args.parentId } }, }, }); context.pubsub.publish("NEW_POST", newPost); return newPost; } si reemplazo args.parentId = 0 obtendré el error de clave externa en gql, si args.parentId = 1 no obtendré un error pero la publicación ya no se considera una publicación raíz (mala).
¿Puede alguien por favor ofrecerme alguna orientación con este problema? Me gustaría ignorar el error de clave externa si es posible.
He investigado las acciones referenciales (que se ven a continuación) para establecer un valor predeterminado en la publicación, pero no creo que mi caso de uso sea el propósito de las acciones referenciales, por lo que no estoy seguro de dónde buscar...
model Post { id Int @id @default(autoincrement()) title String authorUsername String? @default("anonymous") author User? @relation(fields: [authorUsername], references: [username], onUpdate: SetDefault) }