Für den Zugriff auf einzelne Datensätze aus Datenbanktabellen stellt Admidio die TableAccess-Zugriffsklasse zur Verfügung. Damit wird der Zugriff und die Pflege einzelner Datensätze erheblich vereinfacht. Diese Dokumentation beschreibt Funktionen ab Version 2.2 .
Die Klasse kann auf jede Datenbanktabelle angewandt werden. Willst du zum Beispiel mit einem Datensatz der folgenden Tabelle MeineTabelle arbeiten:
CREATE TABLE adm_MeineTabelle ( meine_id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, meine_name VARCHAR(255) NOT NULL, meine_geburtstag datetime, meine_adresse VARCHAR(255) NOT NULL )
, so wird das Objekt wie folgt erstellt:
$meinTabellenObjekt = new TableAccess($gDb, 'MeineTabelle', 'meine', 5);
$gDb ist dabei das Admidio-Objekt für den Zugriff auf die Datenbank
MeineTabelle ist der Tabellenname der Tabelle auf die Zugegriffen werden soll
meine ist das Spaltenpräfix der Tabelle
5 wäre in diesem Fall die Nummer der meine_id, die ausgelesen werden soll. Dieser Parameter ist optional und kann auch erst einmal nicht angegeben werden. Dann kann später über folgende Methode der Datensatz eingelesen werden:
$meinTabellenObjekt->readData(5);
Ist das Objekt mit einer bestimmten ID eingelesen, so können die Inhalte der einzelnen Spalten wie folgt ausgelesen werden:
$name = $meinTabellenObjekt->getValue('meine_name'); $adresse = $meinTabellenObjekt->getValue('meine_adresse');
Eine Besonderheit gibt es bei Datums- und Zeitspalten. Hier kann als zweiter Parameter das Format (siehe date() ) übergeben werden. Wird es nicht übergeben, so wird automatisch das Format aus den Organisationseinstellungen zurückgegeben.
// Format in Organisationseinstellungen z.B. d.m.Y $geburtstag = $meinTabellenObjekt->getValue('meine_geburtstag'); echo $geburtstag // 20.02.1983 $geburtstag = $meinTabellenObjekt->getValue('meine_geburtstag', 'Y/m/d'); echo $geburtstag // 1983/02/20
Daten ändern und speichern geht dann so:
$meinTabellenObjekt->setValue('meine_name', 'Mustermann'); $meinTabellenObjekt->setValue('meine_adresse', 'Musterstraße 129'); $meinTabellenObjekt->save();
Auch beim Speichern gibt es für Datum- und Zeitfelder eine Besonderheit. Hier muss das Datum nach ISO 8601 Y-m-d 1983-02-20 übergeben werden.
Einen neuen Datensatz anlegen funktioniert eigentlich genauso, wie einen Datensatz zu verändern. Es darf vorher nur nicht mit einer ID ein Datensatz eingelesen werden.
$meinTabellenObjekt = new TableAccess($gDb, 'MeineTabelle', 'meine'); $meinTabellenObjekt->setValue('meine_name', 'Musterfrau'); $meinTabellenObjekt->setValue('meine_adresse', 'Musterweg 43'); $meinTabellenObjekt->save();
Schon ist ein neuer Datensatz angelegt worden. Falls man schon ein Objekt der Tabelle besitzt und kein neues Anlegen möchte/muss, so kann man auch einfach die Methode clear auf das vorhandene Objekt anwenden und danach die Daten belegen:
$meinTabellenObjekt->clear(); $meinTabellenObjekt->setValue('meine_name', 'Musterfrau'); $meinTabellenObjekt->setValue('meine_adresse', 'Musterweg 43'); $meinTabellenObjekt->save();
Die TableAccess-Klasse kann den Zeitstempel und die Benutzer-ID desjenigen speichern, der den Datensatz angelegt, sowie desjenigen, der ihn als letztes geändert hat. Dazu müssen die entsprechenden Spalten in der Tabelle nur einem bestimmten Namenschema folgen. Die Aktualisierung der Felder wird dann komplett von der Klasse erledigt, sobald die Methode save() aufgerufen wird. Die Felder müssen wie folgt definiert sein:
meine_usr_id_create INT(11) UNSIGNED, meine_timestamp_create datetime, meine_usr_id_change INT(11) UNSIGNED, meine_timestamp_change datetime
Der Spaltenname fängt mit dem Tabellenpräfix an und besitzt dann einen der folgenden Namen usr_id_create, timestamp_create, timestamp_change und timestamp_change.
Möchte man die Aktualisierung der Felder an einer bestimmten Stelle nicht vornehmen lassen, so kann man dies durch folgenden Aufruf erreichen:
$meinTabellenObjekt->save(false);
Folgende Methoden stehen durch die TableAccess-Klasse zur Verfügung und können von abgeleiteten Klassen erweitert werden:
Intern werden alle aus der Tabelle ausgelesenen Daten in einem Array $db_fields gespeichert. Wer also an bestimmten Stellen schnellern Zugriff auf alle Daten braucht, kann auch direkt auf das Array zugreifen.