Hi!
da hätte ich mal ein kleines Problemchen. Ich hab da eine Datenbank. Und weil ich OOP ganz nett finde hab ich zu jeder Tabelle eine Klasse z.B. cUser. cUser ist eine Unterklasse einer anderen Klasse, welche die Datenbank Verbindung erleichtern soll ... ist eigentlich nicht weiter wichtig. Für eine Datenbank abfrage habe ich ein Objekt. Mache ich eine Datenbank abfrage so bekomme ich Objekte der Klasse cUser zurück.
Datenbankverbindung und Datenbankabfrage sind jeweils ein zusammengeschriebenes Wort. Zur Not mit Bindestrich geschrieben: Datenbank-Verbindung und Datenbank-Abfrage, aber bitte nicht auseinander.
Es ist übrigens nicht immer sinnvoll, eine 1:1-Abbildung zwischen Tabellenstrukturen in einem relationalen DBMS und Klassen im Programm zu erstellen. Ein RDBMS hat gewisse Zwänge, eigentlich zusammenhängende Daten auf mehrere Tabellen verteilen zu müssen. Man kann nicht direkt wie bei der OOP modellieren, dass eine Eigenschaft auf ein anderes Objekt verweist (Parent beispielsweise) oder eine Liste anderer Objekte ist (Children). Dazu verwendet man bei einem RDBMS Verweise mit Schlüsselwerten.
Mein Problem ist jetzt, wenn ich einen Join mache bräuchte ich auch auf der PHP schiene ein "Join" zweier Datencontainer. Beim Beispiel von oben:
Wenn ich einen Join User -> Userrechnung mache, aber den Datencontainer "cUser" benutze, habe ich keine Methode um an die Rechnungsnr. zu kommen. Andersrum, wenn ich cRechnung benutze komme ich nicht an den Usernamen. Außer natürlich man erweitert die Datencontainer. Das möchte ich jedoch nicht :D.
Du siehst, dass dein Modell nicht geeignet ist, wenn du wie bei den Tabellen in deinen Klassen nur Eigenschaften für die Schlüsselwerte stehen hast und nicht mit ihnen auf direkte Weise andere Objekte referenziert werden. Denn das Suchen konkreter Objekte über ihre Schlüsselwerte ist zwar möglich aber aufwendig.
Eine einfache Möglichkeit wäre, die starre Verbindung zwischen Tabelle, Abfrage und Klassen zu lösen. Dann kannst du Abfragen nach Bedarf erstellen, beliebig viele Tabellen dafür verwenden und füllst deine Objekte nach Bedarf und vor allem passend zu den Anforderungen.
Und wenn du mal schauen willst, wie andere Frameworks das lösen, such nach Eager Loading und Lazy Loading. Sowas lässt sich prinzipiell auch mit PHP und etwas Magie bewerkstelligen.
Lo!