javascript - La fonction findMany de Prisma ne retourne pas les données relationnelles


J'essaie de remplir mes données avec des données relationnelles en utilisant Prisma 2.28.0, voici mon

Modèle Schema.prisma ci-dessous

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model Product {
  id           Int         @id @default(autoincrement())
  name         String         @db.VarChar(255)
  transactions Transaction[]
}

model Transaction {
  id        BigInt   @id @default(autoincrement())
  quantity  Int
  time      Int
  product  Product? @relation(fields: [productId], references: [id])
  productId Int?
}


la fonction que j'essaie de récupérer des données.

const { PrismaClient }=require("@prisma/client")

const prisma = new PrismaClient()

async function checkPrismaConnection(){
    try {
        const result=await prisma.product.findMany();
        console.log(result);
    }catch (e) {
        console.log(e);
    }
}

 checkPrismaConnection();

OutPut

[
  { id: 1, name: 'John Doe' },
  { id: 2, name: 'Masum' },
  { id: 3, name: 'Rezaul' }
]

Résultat de la base de données de transaction

Base de données des produits

Je ne sais pas pourquoi mon findMany() ne renvoie pas les données de la base de données relationnelle. Merci

Réponse #1

Je suggère de lire la documentation, en particulier ce chapitre et ceux qui suivent. Dans leur exemple, ils ont un Author et un Post, où Post a un champ author pointant vers un Author. Leur code ressemble à ceci :

const getPosts = await prisma.post.findMany({
  where: {
    title: {
      contains: 'cookies',
    },
  },
  include: {
    author: true, // Return all fields
  },
})

Le chapitre « Inclure des relations profondément imbriquées » un peu plus bas utilise en fait un champ .category qui est également un tableau, comme dans votre exemple avec .transactions.

Réponse #2

Vous devez explicitement définir include sur true.

Donc le code ressemblera à ceci pour vous

const { PrismaClient }=require("@prisma/client")

const prisma = new PrismaClient()

async function checkPrismaConnection(){
   try {
    const result=await prisma.product.findMany({
      include: {
        transaction: true,
       },
   });
    console.log(result);
}catch (e) {
    console.log(e);
}
}

 checkPrismaConnection();