Les exemples de cet article décrivent l'utilisation de Zend_Db_Table. Partagez-le avec tout le monde pour référence, comme suit :
1. Introduction
Zend_Db_Table est le module table de Zend Framework. Il se connecte à la base de données via zend_db_adapter, vérifie l'objet table de la base de données. schéma, et Pour utiliser et interroger la table.
2. Pour démarrer
vous devez d'abord créer la classe abstraite zend_db_table (remarque : cette classe est une classe abstraite, elle ne peut donc pas l'être). instancié directement, vous ne pouvez d'abord hériter de cette classe, puis instancier la sous-classe) pour définir un adaptateur de base de données par défaut ; sauf si vous spécifiez d'autres types d'adaptateurs de base de données, toutes les instances de la classe zend_db_table utiliseront l'adaptateur par défaut.
<?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); ?>
Ensuite, nous supposons que dans la base de données il y a une table appelée "round_table". Pour utiliser zend_db_table pour cette table, héritez simplement de la classe zend_db_table et créez une nouvelle classe appelée RoundTable. Ensuite, je peux vérifier et manipuler les lignes de données dans round_table. table dans la base de données via cette classe Et obtenez les résultats des données.
<?php class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); ?>
3. Nom de la table et clé primaire
Par défaut, la classe zend_db_table traitera son nom de classe comme le nom de la table. dans la base de données (différents cas doivent être ajoutés "_"). Par exemple, une classe zend_db_table nommée SomeTableName correspond à la table "some_table_name" dans la base de données. Si vous ne voulez pas que le nom de la classe corresponde au nom de la table de la base de données. sous cette forme soulignée, vous pouvez définir la classe lors de la Reconstruct $_name.
<?php class ClassName extends Zend_Db_Table { // 默认表名为 'class_name' // 但是我们也可以对应其它表 protected $_name = 'another_table_name'; } ?>
Le champ par défaut "id" de la classe zend_db_table est la clé primaire de la table (il est préférable d'auto-incrémenter ce champ , mais ce n'est pas nécessaire). Si la clé primaire de la table ne le fait pas. Au lieu d'être nommée "$id", vous pouvez reconstruire $_primary lors de la définition de la classe d'entité de la table
<?php class ClassName extends Zend_Db_Table { // 默认主键为'id' // 但我们也可以设定其他列名为主键 protected $_primary = 'another_column_name'; } ?>
Vous pouvez également définir ces variables via la méthode _setup() dans la classe d'entité table ; mais vous devez vous assurer d'exécuter à nouveau la méthode parent::_setup() après modification.
<?php class ClassName extends Zend_Db_Table { protected function _setup() { $this->_name = 'another_table_name'; $this->_primary = 'another_column_name'; parent::_setup(); } } ?>
Insérer des données
Pour insérer une ligne de nouvelles données dans le tableau, changez simplement le nom de la colonne : appelez simplement la méthode insert() avec le tableau associatif de données en paramètre
(zend framework) citera automatiquement. les données et renvoie la valeur id de la dernière ligne insérée
(remarque : ici différente de la méthode zend_db_adapter::insert, cette dernière renvoie le nombre de lignes insérées).
<?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); ?>
5. data
Pour modifier n'importe quelle ligne de données dans le tableau, nous pouvons définir Définir un nom de colonne : un tableau associatif de données en tant que paramètre, appeler la méthode update() et déterminer les lignes qui doivent être modifiées via une clause conditionnelle Where. Cette méthode modifiera les données dans la table et renverra le nombre de lignes modifiées.
(Zend frameword) citera automatiquement les données modifiées, mais cette vérification n'inclut pas de clauses conditionnelles, donc vous devez utiliser l'objet zend_db_adapter de la table pour terminer le travail
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);
6 Suppression de lignes
Pour supprimer des données dans la table, nous pouvons appeler delete(. ) et déterminez les lignes qui doivent être supprimées via une clause conditionnelle Where. Cette méthode renverra le nombre de lignes supprimées.
(zend framework) ne cite pas la clause conditionnelle, vous devez donc l'utiliser. l'objet zend_db_adapter de la table pour terminer le travail
<?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); ?>
7 Selon les données de recherche de clé primaire
En appelant la méthode find(), vous pouvez facilement récupérer les données dans la table en utilisant. la valeur de la clé primaire. Si vous souhaitez uniquement interroger un certain élément de données, cette méthode renverra un objet zend_db_table_row, et lorsque vous souhaitez interroger plusieurs enregistrements, un objet zend_db_table_rowset sera renvoyé.
<?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)); ?>
8. Récupérer un enregistrement
Bien qu'il soit très pratique de trouver la ligne de données correspondante via la clé primaire, mais le plus souvent, nous trouvons des lignes de données via d'autres conditions de clé non primaires zend_db_table fournit un fetchRow. () pour réaliser cette fonction. Nous pouvons utiliser une instruction conditionnelle Where (et une instruction order facultative). Appelez la méthode fetchRow(), puis zend_db_tabel renverra l'objet zend_db_table_row de la première ligne de données qui remplit les conditions. >
Notez que (zend framework) ne citera pas l'instruction Where, vous devez donc transmettre zend_db_adapter effectue le traitement des données<?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); ?>9 Récupérez plusieurs enregistrementsSi vous en avez besoin. Pour récupérer plusieurs enregistrements à la fois, vous pouvez utiliser la méthode fetchAll(). Semblable à la méthode fetchRow(), cette méthode peut non seulement définir les clauses Where et Order, mais également définir les valeurs de nombre limite et de décalage limite. limiter le nombre de résultats renvoyés. Après avoir exécuté cette méthode, le résultat sélectionné est renvoyé sous forme d'objet Zend_Db_Table_Rowset.
Remarque (zend framework) ne citera pas l'instruction Where, vous devez donc effectuer le traitement des données via zend_db_adapter.
<?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); ?>10. Ajout d'une logique de domaine en tant que module de table Zend Framework, Zend_Db_Table s'encapsule bien dans une logique de domaine unique. Par exemple, vous pouvez surcharger les méthodes insert() et update() pour. mettre en œuvre des opérations et une vérification avant que les modifications des données ne soient soumises.
<?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); } } ?>De même, vous pouvez également définir votre propre méthode find() pour interroger les données via d'autres champs en plus de la clé primaire.
<?php class RoundTable extends Zend_Db_Table { public function findAllWithName($name) { $db = $this->getAdapter(); $where = $db->quoteInto("name = ?", $name); $order = "first_name"; return $this->fetchAll($where, $order); } } ?>J'espère que cet article sera utile à tous ceux qui utilisent des programmes PHP basés sur le framework Zend Framework Design. Pour des explications plus détaillées sur l'utilisation de Zend_Db_Table dans le tutoriel Zend Framework, veuillez faire attention au site Web PHP chinois !