Die Beispiele in diesem Artikel beschreiben die Verwendung von Zend_Db_Table. Teilen Sie es wie folgt mit allen:
1. Einführung
Zend_Db_Table ist das Tabellenmodul von Zend Framework. Es stellt eine Verbindung zur Datenbank über zend_db_adapter her und überprüft das Tabellenobjekt für die Datenbank Schema und Um die Tabelle zu bedienen und abzufragen, müssen Sie zunächst
die abstrakte Klasse zend_db_table erstellen direkt instanziiert, Sie können diese Klasse nur zuerst erben und dann die Unterklasse instanziieren), um einen Standarddatenbankadapter festzulegen, sofern Sie keine anderen Arten von Datenbankadaptern angeben. Alle Instanzen der zend_db_table-Klasse verwenden den Standardadapter.
Als nächstes gehen wir davon aus, dass es in der Datenbank eine Tabelle namens „round_table“ gibt. Um zend_db_table für diese Tabelle zu verwenden, erben Sie einfach die Klasse zend_db_table und erstellen Sie eine neue Klasse namens RoundTable. Dann kann ich die Datenzeilen in der Round_table überprüfen und bearbeiten Tabelle in der Datenbank über diese Klasse Und erhalten Sie die Datenergebnisse.<?php // 建立一个 adapter require_once 'Zend/Db.php'; $params = array ( 'host' => '127.0.0.1', 'username' => 'malory', 'password' => '******', 'dbname' => 'camelot' ); $db = Zend_Db::factory('PDO_MYSQL', $params); // 为所有的Zend_Db_Table对象设定默认的adapter require_once 'Zend/Db/Table.php'; Zend_Db_Table::setDefaultAdapter($db); ?>
<?php class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); ?>
Standardmäßig behandelt die Klasse zend_db_table ihren Klassennamen als Tabellennamen in der Datenbank (in verschiedenen Fällen muss „_“ hinzugefügt werden). Beispielsweise entspricht eine zend_db_table-Klasse mit dem Namen „SomeTableName“ der Tabelle „some_table_name“ in der Datenbank In dieser unterstrichenen Form können Sie die Klasse beim Rekonstruieren von $_name definieren.
Das Standardfeld „id“ der Klasse zend_db_table ist der Primärschlüssel der Tabelle (es ist am besten, dieses Feld automatisch zu erhöhen). , aber es ist nicht notwendig). diese Variablen über die _setup()-Methode in der Tabellenentitätsklasse; Sie müssen jedoch sicherstellen, dass Sie die parent::_setup()-Methode nach der Änderung erneut ausführen.<?php class ClassName extends Zend_Db_Table { // 默认表名为 'class_name' // 但是我们也可以对应其它表 protected $_name = 'another_table_name'; } ?>
<?php class ClassName extends Zend_Db_Table { // 默认主键为'id' // 但我们也可以设定其他列名为主键 protected $_primary = 'another_column_name'; } ?>
Um eine Zeile mit neuen Daten in die Tabelle einzufügen, ändern Sie einfach den Spaltennamen: Rufen Sie einfach die Methode insert() mit dem assoziativen Datenarray als Parameter auf.
<?php class ClassName extends Zend_Db_Table { protected function _setup() { $this->_name = 'another_table_name'; $this->_primary = 'another_column_name'; parent::_setup(); } } ?>
(Hinweis: Anders als die Methode zend_db_adapter::insert gibt letztere die Anzahl der eingefügten Zeilen zurück).
5 Daten
Um eine beliebige Datenzeile in der Tabelle zu ändern, können wir einen Spaltennamen festlegen: ein assoziatives Datenarray als Parameter festlegen, die update()-Methode aufrufen und die Zeilen ermitteln, die geändert werden müssen Durch eine Where-Bedingungsklausel ändert diese Methode die Daten in der Tabelle und gibt die Anzahl der geänderten Zeilen zurück.
<?php // // INSERT INTO round_table // (noble_title, first_name, favorite_color) // VALUES ("King", "Arthur", "blue") // class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); $data = array( 'noble_title' => 'King', 'first_name' => 'Arthur', 'favorite_color' => 'blue', ) $id = $table->insert($data); ?>
Zeilen löschen
Um Daten in der Tabelle zu löschen, können wir den Befehl delete( )-Methode und bestimmen Sie die Zeilen, die gelöscht werden müssen, über eine Where-Bedingungsklausel. Diese Methode gibt die Anzahl der gelöschten Zeilen zurück.class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); $db = $table->getAdapter(); $set = array( 'favorite_color' => 'yellow', ) $where = $db->quoteInto('first_name = ?', 'Robin'); $rows_affected = $table->update($set, $where);
(Zend Framework) zitiert die Bedingungsklausel nicht, Sie müssen sie also verwenden das zend_db_adapter-Objekt der Tabelle, um die Arbeit abzuschließen
7. Gemäß Primärschlüssel-Suchdaten
Durch Aufrufen der find()-Methode können Sie Daten in der Tabelle einfach abrufen Der Primärschlüsselwert. Wenn Sie nur ein bestimmtes Datenelement abfragen möchten, gibt diese Methode ein zend_db_table_row-Objekt zurück. Wenn Sie mehrere Datensätze abfragen möchten, wird ein zend_db_table_rowset-Objekt zurückgegeben.
<?php // // DELETE FROM round_table // WHERE first_name = "Patsy" // class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); $db = $table->getAdapter(); $where = $db->quoteInto('first_name = ?', 'Patsy'); $rows_affected = $table->delete($where); ?>
8. Einen Datensatz abrufen
Obwohl es sehr praktisch ist, die entsprechende Datenzeile über den Primärschlüssel zu finden, finden wir Datenzeilen meistens über andere Nicht-Primärschlüsselbedingungen ()-Methode, um diese Funktion zu erreichen. Rufen Sie die fetchRow()-Methode auf, und dann gibt zend_db_tabel das zend_db_table_row-Objekt der ersten Datenzeile zurück, die die Bedingungen erfüllt >
Beachten Sie, dass (Zend Framework) die Where-Anweisung nicht zitiert, daher müssen Sie zend_db_adapter übergeben, um die Datenverarbeitung durchzuführen<?php class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); // SELECT * FROM round_table WHERE id = "1" $row = $table->find(1); // SELECT * FROM round_table WHERE id IN("1", "2", 3") $rowset = $table->find(array(1, 2, 3)); ?>
Hinweis: (Zend-Framework) zitiert die Where-Anweisung nicht, daher müssen Sie die Datenverarbeitung über zend_db_adapter durchführen.
<?php // // SELECT * FROM round_table // WHERE noble_title = "Sir" // AND first_name = "Robin" // ORDER BY favorite_color // class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); $db = $table->getAdapter(); $where = $db->quoteInto('noble_title = ?', 'Sir') . $db->quoteInto('AND first_name = ?', 'Robin'); $order = 'favorite_color'; $row = $table->fetchRow($where, $order); ?>
10. Hinzufügen von Domänenlogik
Als Zend Framework-Tabellenmodul kapselt sich Zend_Db_Table gut in eine einzigartige Domänenlogik ein. Sie können beispielsweise die Methoden insert() und update() überladen Implementieren Sie Vorgänge und Überprüfungen, bevor Datenänderungen übermittelt werden.
<?php class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); $db = $table->getAdapter(); // SELECT * FROM round_table // WHERE noble_title = "Sir" // ORDER BY first_name // LIMIT 10 OFFSET 20 $where = $db->quoteInto('noble_title = ?', 'Sir'); $order = 'first_name'; $count = 10; $offset = 20; $rowset = $table->fetchAll($where, $order, $count, $offset); ?>
Ich hoffe, dass dieser Artikel für jeden nützlich sein wird, der PHP-Programme basierend auf dem Zend Framework Design verwendet.
<?php class RoundTable extends Zend_Db_Table { public function insert($data) { // 添加一个时间戳 if (empty($data['created_on'])) { $data['created_on'] = time(); } return parent::insert($data); } public function update($data) { // 添加一个时间戳 if (empty($data['updated_on'])) { $data['updated_on'] = time(); } return parent::update($data); } } ?>