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
Das Hinzufügen von virtuellen oder berechneten Feldern in Prisma erfordert eine manuelle Vorgehensweise, da Prisma derzeit keine native Unterstützung bietet. Sie können jedoch einen Workaround implementieren, indem Sie Ihre eigene Logik extern handhaben. Hier ist ein Vorschlag zur Implementierung solcher Felder:
Erstellen Sie eine eigene Funktion, die virtuelle Felder berechnet und diese den geladenen Datensätzen hinzufügt. Ein bekannter Use-Case ist die Berechnung des Gravatar-URLs aus einer Email-Adresse.
// Beispiel zur manuellen Implementierung eines virtuellen Feldes
const crypto = require('crypto');
// Funktion für gravatar URL
function computeGravatar(email) {
const hash = crypto.createHash('md5').update(email.trim().toLowerCase()).digest('hex');
return `https://gravatar.com/avatar/${hash}`;
}
// Nutzung der Funktion nachdem ein User aus der Datenbank geladen wurde
async function getUserWithGravatar(userId) {
const user = await prisma.user.findUnique({
where: { id: userId },
});
return {
...user,
gravatar: computeGravatar(user.email), // virtueller/gravatar field
};
}
Diese Methode fügt während der Laufzeit das Gravatar-Feld hinzu, sobald ein Benutzer-Datensatz abgerufen wird.
Beachten Sie, dass dieser Ansatz die Leistung beeinträchtigen könnte, wenn eine große Anzahl von Datensätzen verarbeitet wird, da jedes virtuelle Feld zur Laufzeit berechnet wird.
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: