Heim >php教程 >PHP开发 >Detaillierte Erläuterung der Verwendung von Zend_Db_Table im Zend Framework-Tutorial

Detaillierte Erläuterung der Verwendung von Zend_Db_Table im Zend Framework-Tutorial

高洛峰
高洛峰Original
2017-01-05 09:54:391412Durchsuche

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 &#39;Zend/Db.php&#39;;
$params = array (
  &#39;host&#39;   => &#39;127.0.0.1&#39;,
  &#39;username&#39; => &#39;malory&#39;,
  &#39;password&#39; => &#39;******&#39;,
  &#39;dbname&#39;  => &#39;camelot&#39;
);
$db = Zend_Db::factory(&#39;PDO_MYSQL&#39;, $params);
// 为所有的Zend_Db_Table对象设定默认的adapter
require_once &#39;Zend/Db/Table.php&#39;;
Zend_Db_Table::setDefaultAdapter($db);
?>

3. Tabellenname und Primärschlüssel
<?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
{
  // 默认表名为 &#39;class_name&#39;
  // 但是我们也可以对应其它表
  protected $_name = &#39;another_table_name&#39;;
}
?>

Daten einfügen
<?php
class ClassName extends Zend_Db_Table
{
  // 默认主键为&#39;id&#39;
  // 但我们也可以设定其他列名为主键
  protected $_primary = &#39;another_column_name&#39;;
}
?>

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 = &#39;another_table_name&#39;;
    $this->_primary = &#39;another_column_name&#39;;
    parent::_setup();
  }
}
?>
(Zend Framework) wird automatisch zitiert die Daten und geben den ID-Wert der zuletzt eingefügten Zeile zurück

(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(
  &#39;noble_title&#39; => &#39;King&#39;,
  &#39;first_name&#39; => &#39;Arthur&#39;,
  &#39;favorite_color&#39; => &#39;blue&#39;,
)
$id = $table->insert($data);
?>
(Zend-Rahmenwort) zitiert die geänderten Daten automatisch, diese Prüfung enthält jedoch keine Bedingungsklauseln Sie müssen das zend_db_adapter-Objekt der Tabelle verwenden, um die Arbeit abzuschließen

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(
  &#39;favorite_color&#39; => &#39;yellow&#39;,
)
$where = $db->quoteInto(&#39;first_name = ?&#39;, &#39;Robin&#39;);
$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(&#39;first_name = ?&#39;, &#39;Patsy&#39;);
$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));
?>

9 Rufen Sie mehrere Datensätze ab

Bei Bedarf Um mehrere Datensätze gleichzeitig abzurufen, können Sie die Methode fetchAll() verwenden. Ähnlich wie die Methode fetchRow() kann diese Methode nicht nur Where- und Order-Klauseln festlegen, sondern auch Limit-Count- und Limit-Offset-Werte festlegen Begrenzen Sie die Anzahl der zurückgegebenen Ergebnisse. Nach der Ausführung dieser Methode wird das ausgewählte Ergebnis als Zend_Db_Table_Rowset-Objekt zurückgegeben.

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(&#39;noble_title = ?&#39;, &#39;Sir&#39;)
    . $db->quoteInto(&#39;AND first_name = ?&#39;, &#39;Robin&#39;);
$order = &#39;favorite_color&#39;;
$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(&#39;noble_title = ?&#39;, &#39;Sir&#39;);
$order = &#39;first_name&#39;;
$count = 10;
$offset = 20;
$rowset = $table->fetchAll($where, $order, $count, $offset);
?>
Ähnlich können Sie auch Ihre eigene find()-Methode festlegen, um Daten über andere Felder als den Primärschlüssel abzufragen.

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[&#39;created_on&#39;])) {
      $data[&#39;created_on&#39;] = time();
    }
    return parent::insert($data);
  }
  public function update($data)
  {
    // 添加一个时间戳
    if (empty($data[&#39;updated_on&#39;])) {
      $data[&#39;updated_on&#39;] = time();
    }
    return parent::update($data);
  }
}
?>
Weitere Zend Framework-Tutorials und detaillierte Erklärungen zur Verwendung von Zend_Db_Table finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn