Magento 2 Experten — Hyvä Theme, Tailwind CSS & SEO aus einer Hand ›

Berechnete Felder ohne Datenbankspalte

Berechnete Felder ohne Datenbankspalte

~13 Min. Lesezeit Zuletzt aktualisiert am 8. August 2026

NICHT jedes Feld in der API-Antwort muss aus einer Datenbankspalte kommen – ein GETTER ohne zugehöriges #[ORM\Column] reicht bereits aus.

isRecent als berechnetes Feld

api/src/Entity/Project.php
#[Groups(['project:read'])]
public function isRecent(): bool
{
    $sevenDaysAgo = new \DateTimeImmutable('-7 days');

    return $this->createdAt > $sevenDaysAgo;
}

KEIN #[ORM\Column], KEINE Property – NUR eine öffentliche Methode namens isX() mit #[Groups] davor. API Platform (genauer: der zugrunde liegende Symfony Serializer) erkennt is*()- UND get*()-Methoden AUTOMATISCH als serialisierbare Properties.

Das Ergebnis prüfen

curl -k https://localhost/api/projects/1
{
  "id": 1,
  "name": "Website-Relaunch",
  "description": "Kompletter Redesign",
  "createdAt": "2026-08-06T12:00:00+00:00",
  "isRecent": true
}

isRecent im JSON, OBWOHL die Datenbanktabelle KEINE entsprechende Spalte besitzt – der Wert wird bei JEDER Anfrage NEU berechnet, ist also IMMER aktuell, im Gegensatz zu einem gespeicherten, potenziell VERALTETEN Wert.

Wann berechnete Felder sinnvoll sind

  • Werte, die sich aus BEREITS vorhandenen Feldern ableiten (wie isRecent aus createdAt).
  • Aggregationen über Beziehungen, z. B. eine Task-Anzahl (relevant AB Block 5, sobald Project mit Task verknüpft ist).
  • Formatierte Darstellungen für das Frontend, z. B. ein fertig zusammengesetzter Anzeigename.

Achtung: Berechnete Felder sind NUR lesbar (normalizationContext), NIEMALS gleichzeitig in denormalizationContext – es gibt KEIN Setter-Gegenstück, ein Schreibversuch würde schlicht INS LEERE laufen.

Tipp: Performance-Hinweis: berechnete Felder, die auf BEZIEHUNGEN zugreifen (Kapitel 41+), können zu N+1-Datenbankabfragen führen, falls die Beziehung nicht vorab geladen wird – dieses Thema wird in Block 5 vertieft, sobald echte Relationen existieren.