Verhalten von ORM und ODM
In brandbox werden zwei verschiedene Systeme genutzt um Daten in einer Datenbanktabelle abzulegen.
ORM: Eine Information hat eine Spalte in der Datenbanktabelle und kann dieser genau zugeordnet werden (Standardverhalten von Doctrine)
ODM: Mehrere Informationen werden als JSON in einer Datenbankspalte zusammengefasst und gemeinsam gespeichert
Um beide Systeme ohne Aufwand für Programmierer nutzbar zu machen unterscheidet brandbox intern ob eine Information aus deiner ORM- oder ODM-Spalte abgerufen werden muss und passt die Datenbankabfrage entsprechend an. Dadurch macht es für Implementationen keinerlei Unterschied ob es sich um eine tatsächlich in der Datenbanktabelle existierende Spalte oder einer Information aus der gemeinsamen ODM-Spalte handelt.
Für diese Entscheidung bei einer Abfrage (Query) ist der OdmQueryBuilderTransformer
verantwortlich. Dieser befindet sich in Brandbox/Doctrine und wird bei jeder Datenbankabfrage aufgerufen. Hier wird jeder Teil der Datenbankabfrage überprüft, ob auf eine Information innerhalb der ODM-Spalte zugegriffen werden muss. Sollte dies der Fall sein, wird die Abfrage entsprechend angepasst.
Entities mit ODM-Informationen
Innerhalb von PHP-Entities kann ebenso mit beiden System gearbeitet werden. Viele Entities von brandbox besitzen die dafür notwendige ODM-Spalte. Hierbei kann, wie auch bei ORM-Informationen, direkt über das Entites zugegriffen und geschrieben werden. Es ist keine Sonderbehandlung erforderlich.