Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
de:entwickler:tabellenzugriffsklassen [2010/03/07 12:00] – Komplett neu erstellt mit Beispielen fassede:entwickler:tabellenzugriffsklassen [2012/05/12 00:43] (current) – [Wie lege ich einen neuen Datensatz an ?] thomas-rcv
Line 1: Line 1:
 ====== Zugriff auf Tabellen mit TableAccess ====== ====== Zugriff auf Tabellen mit TableAccess ======
 ==== Wie erstelle ich ein Objekt der Klasse ? ==== ==== Wie erstelle ich ein Objekt der Klasse ? ====
-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.+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 z.B. mit einem Datensatz der Tabelle **MeineTabelle** arbeiten:<code sql>create table adm_MeineTabelle+Die Klasse kann auf jede Datenbanktabelle angewandt werden. Willst du zum Beispiel mit einem Datensatz der folgenden Tabelle **MeineTabelle** arbeiten:<code sql>create table adm_MeineTabelle
 ( (
    meine_id            int(11) unsigned not null AUTO_INCREMENT,    meine_id            int(11) unsigned not null AUTO_INCREMENT,
Line 9: Line 9:
    meine_geburtstag    datetime,    meine_geburtstag    datetime,
    meine_adresse       varchar(255)     not null    meine_adresse       varchar(255)     not null
-)</code>, so wird das Objekt wie folgt erstellt: <code php>$meinTabellenObjekt = new TableAccess($g_db, 'MeineTabelle', 'meine', 5);</code> **$g_db** ist dabei das Admidio-Objekt für den Zugriff auf die Datenbank\\ +)</code>, so wird das Objekt wie folgt erstellt: <code php>$meinTabellenObjekt = new TableAccess($gDb, 'MeineTabelle', 'meine', 5);</code> **$gDb** ist dabei das [[de:entwickler:datenbankzugriffsklasse|Admidio-Objekt für den Zugriff auf die Datenbank]]\\ 
 **MeineTabelle** ist der Tabellenname der Tabelle auf die Zugegriffen werden soll\\  **MeineTabelle** ist der Tabellenname der Tabelle auf die Zugegriffen werden soll\\ 
 **meine** ist das Spaltenpräfix der Tabelle\\  **meine** ist das Spaltenpräfix der Tabelle\\ 
Line 23: Line 23:
 echo $geburtstag // 1983/02/20</code> echo $geburtstag // 1983/02/20</code>
 Daten ändern und speichern geht dann so:<code php>$meinTabellenObjekt->setValue('meine_name', 'Mustermann'); Daten ändern und speichern geht dann so:<code php>$meinTabellenObjekt->setValue('meine_name', 'Mustermann');
-$meinTabellenObjekt->setValue('meine_adresse', 'Musterstraße');+$meinTabellenObjekt->setValue('meine_adresse', 'Musterstraße 129');
 $meinTabellenObjekt->save();</code> $meinTabellenObjekt->save();</code>
 Auch beim Speichern gibt es für Datum- und Zeitfelder eine Besonderheit. Hier **muss** das Datum nach [[http://de.wikipedia.org/wiki/ISO_8601|ISO 8601]] **Y-m-d** //1983-02-20// übergeben werden. Auch beim Speichern gibt es für Datum- und Zeitfelder eine Besonderheit. Hier **muss** das Datum nach [[http://de.wikipedia.org/wiki/ISO_8601|ISO 8601]] **Y-m-d** //1983-02-20// übergeben werden.
  
-==== Warum sind Tabellenklassen notwendig ? ==== +==== Wie lege ich einen neuen Datensatz an ? ==== 
- +Einen neuen Datensatz anlegen funktioniert eigentlich genausowie einen Datensatz zu verändernEs darf vorher nur nicht mit einer ID ein Datensatz eingelesen werden. <code php>$meinTabellenObjekt = new TableAccess($gDb, 'MeineTabelle', 'meine'); 
-Die Tabellenklassen sollen den Zugriff auf die jeweilige Tabelle erleichtern und außerdem tabellenspezifische Methoden zur Verfügung stellen. Mit Hilfe der Tabellenklassen sollte es daher nicht mehr nötig seinselber //INSERT// oder //UPDATE// Befehle erstellen zu müssen. (Ausnahmen sind hier Massenupdates/-insertsDie Tabellenklasse ist so intelligentdass sie nur Updates/Insert macht, wenn dies nötig ist. Außerdem werden noch allgemeine Wertprüfungen gemachtwelche in jeder Klasse noch verfeinert bzw. erweitert werden können um so auch inhaltliche Prüfungen zu ermöglichen. +$meinTabellenObjekt->setValue('meine_name', 'Musterfrau')
- +$meinTabellenObjekt->setValue('meine_adresse''Musterweg 43'); 
-Seit der Version 2.0 sind die vorhandenen Tabellenklassen überarbeitet und einige Neue hinzugefügt. Sinn der Überarbeitung war die wiederholenden Methoden, welche in jeder Klasse vorkamen in eine übergeordnete Klasse **TableAccess** auszugliedern und in den jeweiligen Tabellenklassen dann nur noch die spezifischen Dinge zu implementieren. +$meinTabellenObjekt->save();</code>Schon ist ein neuer Datensatz angelegt wordenFalls 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:<code php>$meinTabellenObjekt->clear(); 
- +$meinTabellenObjekt->setValue('meine_name', 'Musterfrau'); 
-==== Die Mutterklasse TableAccess ====+$meinTabellenObjekt->setValue('meine_adresse', 'Musterweg 43'); 
 +$meinTabellenObjekt->save();</code>
  
-Mit Version 2.2 muss die Klasse TableAccess nicht mehr für jede Datenbanktabelle abgeleitet werden. Über den neu hinzugefügten Konstruktor in TableAccess kann nun bei entsprechender Übergabe des Tabellennamens und des Spaltenpräfix ein Objekt einer beliebigen Tabelle erzeugt werdenSofern man keine speziellen Anforderungen beim BefüllenAuslesenSpeichern oder Löschen braucht reicht dies vollkommen aus und man kann mit den unten beschriebenen Funktionen in der Tabelle arbeiten.+==== Wie kann ich Änderungszeitstempel und Benutzer bequem speichern ? ==== 
 +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 folgenDie Aktualisierung der Felder wird dann komplett von der Klasse erledigtsobald die Methode **save()** aufgerufen wird.  
 +Die Felder müssen wie folgt definiert sein:<code sql>meine_usr_id_create       int(11) unsigned, 
 +meine_timestamp_create    datetime, 
 +meine_usr_id_change       int(11) unsigned, 
 +meine_timestamp_change    datetime</code>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**.
  
-Sollen allerdings abhängige Daten mit gelöscht oder beim Speichern bestimmte Spalten automatisch mit einem aktuellen Zeitstempel befüllt werden, so muss die Klasse abgeleitet und die einzelnen Funktionen ggf. überschrieben werden. Im Konstruktor der abgeleiteten Klasse muss dann der Konstruktor von TableAccess mit den entsprechenden Übergaben aufgerufen werden. Danach kann jede beliebige Methode überschrieben werden.+Möchte man die Aktualisierung der Felder an einer bestimmten Stelle nicht vornehmen lassen, so kann man dies durch folgenden Aufruf erreichen: <code php>$meinTabellenObjekt->save(false);</code>
  
-Ein gutes Beispiel für eine abgeleitete Klasse ist **TableGuestbook**-Klasse: +==== Welche Methoden stehen zur Verfügung ? ==== 
-<code php>public function __construct(&$db, $gbo_id 0) +Folgende Methoden stehen durch die TableAccess-Klasse zur Verfügung und können von abgeleiteten Klassen erweitert werden:
-+
-    parent::__construct($db, TBL_GUESTBOOK, 'gbo', $gbo_id); +
-}</code> +
-Mit diesen Informationen funktionieren dann auch schon alle Methoden der TableAccess-Klasse:+
   * **readData** liest den entsprechenden Datensatz aus der Datenbank aus. Mit speziellen Übergaben kann hier das SQL-Statement noch verändert werden (Bsp: roles_class.php)   * **readData** liest den entsprechenden Datensatz aus der Datenbank aus. Mit speziellen Übergaben kann hier das SQL-Statement noch verändert werden (Bsp: roles_class.php)
   * **clear** initialisiert alle eingelesenen Daten. Die Methode kann in der spezifischen Klasse abgeleitet werden um dort dann noch weitere Daten zu initialisieren (Bsp: organization_class.php)   * **clear** initialisiert alle eingelesenen Daten. Die Methode kann in der spezifischen Klasse abgeleitet werden um dort dann noch weitere Daten zu initialisieren (Bsp: organization_class.php)
  • de/entwickler/tabellenzugriffsklassen.1267959606.txt.gz
  • Last modified: 2010/03/07 12:00
  • by fasse