SQL-Builder
Die SQL-Builder-Hilfsklassen bieten eine Möglichkeit, SQL-Befehle einheitlich zu formulieren und durch das Framework in den jeweiligen Dialekt übersetzten zu lassen. Dies ermöglicht eine wesentlich höhere Portierbarkeit der Anwendungen bei relativ geringen Einschränkungen der Abfragemöglichkeiten.
Durch den entstehenden Zusatzaufwand auf dem Anwendungsserver sollte dies allerdings nicht für triviale Abfragen (SELECT
* FROM tabelle
) verwendet werden und wenn möglich die generierten Befehle bei mehrmaliger Verwendung gecached werden.
Die Hilfsklassen setzten auf das "method chaining"-Pattern, wodurch es mit relativ geringem Aufwand möglich ist, bekannte SQL-Ausdrücke in Code umzuwandeln.
Builderklassen
Für das Erstellen von SQL-Abfragen existieren im Namespace \Mammut\DB\Sql\ vier Klassen, um die entsprechenden Befehle zu modellieren:
- Insert
- Für Befehle ensprechend
INSERT INTO ...
- Select
- Für Befehle ensprechend
SELECT ...
- Update
- Für
UPDATE ...
SQL-Befehle - Delete
- Für
DELETE FROM ....
SQL-Befehle
All diese Klassen implementieren das iSql-Interface, welches die Methode getSql() zum generieren des entsprechenden Ausdruck auf Basis eines SQL-Dialektes definiert.
Die meisten Datenbankmethoden wie query() oder getXYZList() können auch direkt Instanzen der Builderklassen verwenden, wobei hier NICHT geprüft wird, ob diese Kombination auch Sinn ergibt (z.B. Delete-Objekt in Verbindung mit getObjectList()).
Beispiel
$select = $db->select()->from('moduleinstances')->where([ 'site_id' => 1, 'instance' => new Parameter() ]); $modInstance = $db->getObjectP($select, ['home'], ModuleInstance::clazz());