Ricerca nel sito web

javascript - La funzione findMany di Prisma non restituisce i dati relazionali


Sto cercando di popolare i miei dati con dati relazionali usando Prisma 2.28.0, ecco il mio

Modello Schema.prisma qui sotto

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 funzione che sto cercando di recuperare dati.

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' }
]

Risultato del database delle transazioni

Database dei prodotti

Non so perché il mio findMany() non restituisca i dati del database relazionale. Grazie

Risposta n. 1

Suggerisco di leggere la documentazione, in particolare questo capitolo e quelli successivi. Nel loro esempio, hanno un Author e un Post, dove Post ha un campo author che punta a un Author. Il loro codice appare così:

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

Il capitolo "Include relazioni profondamente annidate", un po' più in basso, utilizza in realtà un campo .category che è anch'esso un array, come nel tuo esempio con .transactions.

Risposta n. 2

Devi impostare esplicitamente include su true.

Quindi il codice per te sarà così

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();