Actualmente me pregunto si es posible obtener datos de más de una tabla en una sola consulta.
Tenemos una tabla de miembros del equipo y una tabla de usuarios. Queremos obtener información sobre cada usuario en la tabla teamMember y obtener los datos correspondientes de la tabla de usuarios.
¿Es posible hacerlo en una sola consulta? ¿O tendría que usar dos consultas findMany?
const members = await prisma.teamMember.findMany({ where: { teamId, }, }); const membersInfo = []; members.map(async (e) => { const response = await prisma.user.findFirst({ where: { id: e.userId, }, }); if(response) membersInfo.push(response); });```Sí, puede consultar los datos del User mientras obtiene la información TeamMember .
Considere este ejemplo:
schema.prisma
// This is your Prisma schema file, // learn more about it in the docs: https://pris.ly/d/prisma-schema generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_URL") } model TeamMember { id Int @id @default(autoincrement()) team_id Int User User? @relation(fields: [userId], references: [id]) userId Int? } model User { id Int @id @default(autoincrement()) name String email String password String team TeamMember[] } index.ts
import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient({ log: ['query'], }); async function main() { await prisma.user.create({ data: { email: 'test@test.com', name: 'test', password: 'test', team: { create: { team_id: 1, }, }, }, }); console.log('Created user'); const teamWithUsers = await prisma.teamMember.findUnique({ where: { id: 1, }, include: { User: true, }, }); console.log('teamWithUsers', teamWithUsers); } main() .catch((e) => { throw e; }) .finally(async () => { await prisma.$disconnect(); });Aquí está la respuesta:
teamWithUsers { id: 1, team_id: 1, userId: 1, User: { id: 1, name: 'test', email: 'test@test.com', password: 'test' } }De forma predeterminada, los campos de relación no se recuperan, si necesita obtener los datos de los campos de relación en ese caso, deberá especificar la cláusula de inclusión como se muestra en el ejemplo anterior.