¿Prisma tiene la capacidad de mover campos anidados desde otra combinación de tablas al nivel superior del resultado, como una vista aplanada? Quiero poner el resultado JSON en una tabla de interfaz sin tener que buscar en los objetos anidados y construir otro objeto.
Por ejemplo, quiero replicar este comportamiento donde puedo seleccionar y elegir las columnas de diferentes tablas (columnas de Usuario y Escuela). Actualmente uso una consulta sin procesar con un SQL similar, sin embargo, me pregunto si es posible usando solo la API de Prisma:
SELECT u.id , u.email , s.school_name FROM "User" AS u JOIN "UserSchool" AS us ON us.user_id = u.id JOIN "School" AS s ON s.id = us.school_id id | email | school_name 123| student1@email.com | mount high I want JSON that looks like this: { "id": "1", "email": "student1@email.com", "school_name": "mount high", } Si hiciera esto en Prisma, necesitaría ir a varios niveles de objetos anidados para obtener el mismo nombre de columna en otra tabla, por ejemplo user[user_school][schoo][school_name] . Esto requiere trabajo adicional para recorrer todos mis resultados, extraer del objeto anidado y construir otro objeto. Este ejemplo no es tan malo, pero tengo más uniones y objetos profundamente anidados para mi problema real (muchas tablas de asociación/búsqueda). Experimenté con select e include para mis uniones, pero están estructuradas con el JSON anidado.
users = await prisma.user.findMany({ include: { user_school: { include: { school: true, }, }, }, { "id": "1", "email": "student1@email.com", "user_school": [ { "id": 1, "user_id": "1", "school_id": "1", "school": { "id": 1, "school_name": "mountain high", } } ], }No es posible aplanar los resultados a partir de ahora.
La única forma de lograr esto sería usando rawQuery como mencionaste.
Sin embargo, existe una solicitud de función que analiza el aplanamiento de los resultados al proporcionar una opción de flatten:true . Si pudiera mencionar su caso de uso allí y agregar un comentario, ayudaría al equipo de productos e ingeniería de Prisma a priorizarlo.