Virtual or computed fields can be pretty useful when fields are derived from the parts of the actual record(for example computing gravatar from email). - Mongoose implements them like so: https://mongoosejs.com/docs/tutorials/virtuals.html - TypeORM via `@AfterLoad`: https://github.com/typeorm/typeorm/blob/master/docs/listeners-and-subscribers.md#afterload + https://github.com/typeorm/typeorm/issues/1288#issuecomment-478337948 - Sequelize has virtual fields via their getters/setters and `D
Prisma unterstützt nativ keine virtuellen oder computeten Felder wie andere ORMs. Jedoch kann eine ähnliche Funktion durch manuelle Implementierung erreicht werden. Hier ist ein Ansatz zur Implementierung von virtuellen Feldern in einem Prisma-Projekt:
Zuerst erweitern Sie Ihr Prisma-Modell-Schema, um die Felder zu markieren, die als computet gelten könnten (keine native Unterstützung vorhanden):
model User {
id String @id @default(cuid())
email String
// gravatar String // Dies wäre ein virtuelles Feld und sollte nicht im Schema existieren
}Erstellen Sie eine separate Ordnerstruktur, um die Logik für computete Felder zu handhaben.
project-root/
├── prisma/
│ └── schema.prisma
└── computed/
└── User.tsIn User.ts implementieren Sie die Logik für das computete Feld:
import md5 from 'md5';
export const formatGravatarUrl = (email: string): string => {
const hash = md5(email.trim().toLowerCase());
return `https://gravatar.com/avatar/${hash}`;
};Im Anwendungscode rufen Sie diese Funktion auf, nachdem Sie einen Benutzer aus der Datenbank abgerufen haben:
import { PrismaClient } from '@prisma/client';
import { formatGravatarUrl } from './computed/User';
const prisma = new PrismaClient();
async function getUserWithGravatar(userId: string) {
const user = await prisma.user.findUnique({
where: { id: userId }
});
if (user) {
const gravatarUrl = formatGravatarUrl(user.email);
return { ...user, gravatar: gravatarUrl };
}
return null;
}Nutzen Sie die getUserWithGravatar-Funktion jedes Mal, wenn Sie einen Benutzer benötigen, inklusive dem computeten Feld.
Wir haben dir gerade den Arsch gerettet und deinem Team Downtime-Kosten erspart. Keine Paywall, kein Formular. Wenn dein Server wieder atmet, schließe den kybernetischen Kreislauf: