typescript - Hämta datum(enda) kolumn som sträng eller mappa till sträng utan tid med Prisma ORM


Jag använder Prisma2 (prisma @prisma/client).

I min underliggande Postgres-databas har jag en kolumn av typen date, alltså endast datum utan tid.

Prisma returnerar för denna kolumn ett Javascript Date-objekt (https://www.prisma.io/docs/concepts/components/preview-features/native-types/native-types-mappings#datetime), som också innehåller tidsinformation.

Efter serialisering får jag en fullständig ISO-sträng med datum och tid. Jag vill dock endast returnera datumdelen (tidsdelen kommer alltid vara 00:00:00).

För tillfället gör jag:

return await prisma.entity.findMany().map(e => ({ ...e, date: e.date.toISOString().substring(0,10) }))

Jag skulle vilja bli av med den manuella mappningen eftersom jag måste upprepa den för varje fråga och mappningen blir mer komplicerad för inbäddade frågor osv.

Stöder Prisma någon typ av transformation (t.ex. med class-transformer) som läggs till modellen (och utförs automatiskt)? Jag har inte hittat något i dokumentationen. Eller kan jag lära Prisma att returnera denna kolumn som en sträng, inte som ett Date-objekt?

Svar #1

Prisma Client returnerar JavaScript Date-objekt enligt design, tyvärr kan detta inte konfigureras i Prisma Client API.

Som en lösning skulle du kunna överväga att skriva en middleware-funktion som automatiskt konverterar Date-objekt till strängar så att du inte behöver göra det manuellt i din applikation varje gång du arbetar med ett Date.

Om du vill se detta stöds nativt av Prisma, är du välkommen att öppna en funktionförfrågan med ditt användningsfall så att vårt team kan titta på detta.

Svar #2

du kan använda middleware för att hämta en sträng, men om du gör på det här sättet är typen av detta fält fortfarande en "Datetime" i schemat, vilket kommer att begränsa ditt hanterande av detta fält med Datetime-API:er!

Relaterade artiklar