Tengo el siguiente archivo prisma.schema
para una aplicación pequeña donde las cuentas de usuario tienen una relación de muchos a muchos con las habilidades. Estoy tratando de escribir una consulta de prisma que acepte una lista de habilidades y cree una nueva cuenta y también conecte las habilidades a la cuenta de usuario si existe, o cree la habilidad y luego la conecte a la cuenta si no existe.
model Account { id Int @id @default(autoincrement()) skills SkillsOnAccounts[] } model Skill { id Int @id @default(autoincrement()) name String accounts SkillsOnAccounts[] } model SkillsOnAccounts { skill Skill @relation(fields: [skillId], references: [id]) skillId Int account Account @relation(fields: [accountId], references: [id]) accountId Int @@id([skillId, accountId]) }
Tengo algunos problemas al usar connectOrCreate
.
prisma.account.create({ data: { skills: { create: skills.map((skill) => { return { skill: { connectOrCreate: { where: { name: skill.value }, create: { name: skill.value, }, }, }, } }), }, } })
Sin embargo, estoy recibiendo un error,
Unknown arg `name` in data.skills.create.0.skill.connectOrCreate.where.name for type SkillWhereUniqueInput. Did you mean `id`? Available args: type SkillWhereUniqueInput { id?: Int }
Parece que lo único aceptado en el objeto de conexión connectOrCreate es ID. Verifiqué esto, y funcionó para mí, pero esto parece contrario a la intuición. Si estoy usando connectOrCreate, es porque posiblemente todavía no tengo un registro para ese elemento. En este caso, es posible que no tenga una habilidad persistente en la base de datos, así que quiero crearla. Por lo tanto, todavía tengo una identificación. ¿De qué sirve usar connectOrCreate si ya tiene identificaciones para todo lo que desea conectar? ¿Puedes simplemente conectarte?
Me encantaría recibir consejos sobre cómo conectarse o crear correctamente cuando no tiene la identificación. Quiero poder pasar el nombre de la habilidad a connectOrCreate para que conecte la habilidad con ese nombre o cree una nueva habilidad con ese nombre.
¿Quizás porque no hay garantía de que el nombre sea único? Si agrego una restricción, ¿funcionaría?
La respuesta fue que no había garantía de que el nombre fuera único. ¡Agregar @unique
al campo de nombre del modelo de habilidad solucionó el problema!