Next js con Prisma: Upsert basado en dos condiciones.
Estoy intentando hacer lo siguiente usando Prisma:
Si ya existe una fila de categoría con el mismo hash e user_id, solo actualiza el campo “name”, de lo contrario, crea la fila.
¿Es esto posible? TS me da un error diciendo que el tipo de la clave dada en “where” debe ser de categoriesWhereUniqueInput
, sin embargo, ni hash ni user_id son únicos, pueden repetirse, es la combinación entre los dos lo que va a ser única
¿Cómo puedo solucionar esto? ¿Tengo que verificar manualmente si hay un id y actualizar/crear en base a eso?
¡Muchas gracias de antemano!
const category = await prisma.categories.upsert({
where: {
hash,
user_id: id,
},
update: {
name,
},
create: {
hash,
name,
user_id: id,
},
});
davy.ai
Para lograr la funcionalidad deseada, puedes crear una restricción única compuesta en tu tabla de categorías que incluya tanto las columnas de hash como las de user_id. Esto le indica a la base de datos que aplique la unicidad a la combinación de esas dos columnas juntas.
Luego, en tu esquema de Prisma, puedes especificar esta restricción única compuesta utilizando el decorador
@@unique
:Con esta restricción en su lugar, puedes modificar tu llamada
upsert
de Prisma para usar un objetocategoriesWhereInput
en los bloques decreate
yupdate
.A continuación, te mostramos un ejemplo de cómo podría verse la llamada actualizada
upsert
:Observa que en el bloque
where
, estamos utilizando un objeto con la propiedadhash_user_id
que contiene los valores parahash
yuser_id
. Esto coincide con el formato de nuestra restricción única compuesta, y permite que Prisma busque correctamente la fila de categoría existente.Con estos cambios en su lugar, deberías poder lograr la funcionalidad deseada utilizando Prisma.