es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Prisma no puede filtrar el valor null en prisma.findUnique si mi índice único es un DateTime.

Mi modelo schema.prisma es el siguiente:

model User {
    id        String    @id @db.VarChar(255)
    email     String    @db.VarChar(255)
    createdAt DateTime  @default(now()) @map("created_at") @db.Timestamptz(6)
    updatedAt DateTime  @default(now()) @updatedAt @map("updated_at") @db.Timestamptz(6)
    deletedAt DateTime? @map("deleted_at") @db.Timestamptz(6)

    @@unique([email, deletedAt])
    @@map("user")
}

Mi clave única en la columna email está asociada con la otra columna deletedAt porque quiero poder usar el correo electrónico nuevamente después de que se elimine un usuario.

La consulta para obtener un usuario por correo electrónico debería ser simple. Donde el correo electrónico sea igual y donde deletedAt sea nulo. Intenté el siguiente comando en js con prisma.

const account = await this.prisma.user.findUnique({ where: { email_deletedAt: { email: 'user@exemple.com', deletedAt: null } } });

Obtuve este error:

Argument deletedAt: Got invalid value null on prisma.findUniqueUser. Provided null, expected DateTime.

En mi modelo, digo explícitamente que deletedAt podría ser nulo, pero esta consulta parece no esperar un valor nulo … ¿Estoy haciendo algo mal?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnología de la información especializado en Typescript, DateTime, Null, Nullable y Prisma, puedo explicar qué está causando el error y sugerir una solución.

    El mensaje de error indica que la consulta espera un valor no nulo para “deletedAt”, aunque está definido como nulo en el esquema. Esto se debe probablemente a que la consulta está usando la sintaxis “email_deletedAt” en lugar de separar los valores de correo electrónico y deletedAt.

    Para solucionar el error, la consulta se debe actualizar para separar los valores de correo electrónico y deletedAt y proporcionar un valor DateTime adecuado para el parámetro ‘deletedAt’, de esta manera:

    const cuenta = await this.prisma.usuario.findUnique({
      where: {
        email: 'usuario@exemple.com',
        deletedAt: nulo
      }
    });
    

    Esto debería recuperar correctamente un usuario con el correo electrónico dado y un valor nulo deletedAt.

    Es importante tener en cuenta que la sintaxis “email_deletedAt” en la consulta original se utiliza para combinar los valores de correo electrónico y deletedAt en una sola cadena, pero no maneja correctamente la nulidad de “deletedAt”. Por lo tanto, es mejor utilizar parámetros separados para una mejor claridad y evitar errores inesperados.

Comments are closed.