Zend_Db_Table_Row
constitue la passerelle du Framework Zend avec les données des lignes de votre base de données.
En général, vous n'instanciez pas directement Zend_Db_Table_Row
; vous obtenez plutôt un objet Zend_Db_Table_Row comme
valeur de renvoi des méthodes Zend_Db_Table::find()
et Zend_Db_Table::fetchRow()
. Une fois que vous disposez d'un objet
Zend_Db_Table_Row
, vous pouvez modifier les valeurs de l'enregistrement associé (représentées sous forme de propriétés de la classe)
et ensuite enregistrer les changements dans la table avec la méthode save()
.
La première chose à faire consiste à instancier la classe Zend_Db_Table
.
<?php // définition d'un adaptateur require_once 'Zend/Db.php'; $parametres = array ( 'adapter' => 'PDO_MYSQL', 'host' => '127.0.0.1', 'username' => 'arthur', 'password' => '******', 'dbname' => 'camelot' ); $db = Zend_Db::factory($parametres); // on définit l'adaptateur par défaut de tous les objets Zend_Db_Table require_once 'Zend/Db/Table.php'; Zend_Db_Table::setDefaultAdapter($db); // on se relie à une table de la base de données class TableRonde extends Zend_Db_Table {} $table = new TableRonde(); ?>
Puis, on obtient un enregistrement particulier de la base de données en passant une clé à la méthode Zend_Db_Table::find()
ou en utilisant la méthode Zend_Db_Table::fetchRow()
. Le résultat renvoyé sera un objet Zend_Db_Table_Row
dont chaque propriété
est un nom au format "notationCamel" correspondant au nom d'une colonne de la table au format "mots_separes_par_tirets_bas".
À titre d'exemple, la colonne dont le nom sera "nom_de_famille" correspondra à la propriété "nomDeFamille" au sein de l'objet.
<?php // on va chercher un enregistrement particulier de la table sous forme d'objet // Zend_Db_Table_Row $ligne = $table->fetchRow('prenom = "Robin"'); // // $ligne constitue maintenant un objet Zend_Db_Table_Row dont les propriétés // publiques sont associées aux colonnes de la table : // // $ligne->id = '3' // $ligne->titre = 'Sire' // $ligne->prenom = 'Robin' // $ligne->couleurPreferee = 'jaune' // ?>
Modifier les valeurs de la ligne est très simple : travaillez simplement en manipulant les propriétés de l'objet
comme vous le feriez avec n'importe quel objet. Lorsque vous avez terminé, vous pouvez ensuite enregistrer de nouveau
la ligne dans la table avec la méthode save()
.
<?php // connexion à une table de la base de données class TableRonde extends Zend_Db_Table {} $table = new TableRonde(); // on va chercher un enregistrement particulier de la table sous forme d'objet // Zend_Db_Table_Row $ligne = $table->fetchRow('prenom = "Robin"'); // // $ligne constitue maintenant un objet Zend_Db_Table_Row dont les propriétés // publiques sont associées aux colonnes de la table : // // $ligne->id = '3' // $ligne->titre = 'Sire' // $ligne->prenom = 'Robin' // $ligne->couleurPreferee = 'jaune' // // on change la couleur préférée et on enregistre le changement dans la table $ligne->couleurPreferee = 'bleu';' $ligne->save(); ?>
Toutefois, il n'est pas permis de changer la valeur d'une clé primaire; si vous faites cela, Zend_Db_Table_Row
lancera une exception.
<?php // connexion à une table de la base de données class TableRonde extends Zend_Db_Table {} $table = new TableRonde(); // on va chercher un enregistrement particulier de la table sous forme d'objet // Zend_Db_Table_Row $ligne = $table->fetchRow('prenom = "Robin"'); // peut-on changer la clé primaire "id"? try { $ligne->id = 5; echo "Vous ne devriez pas voir ce message, car une exception devrait se déclencher."; } catch (Zend_Db_Table_RowException $e) { echo $e->getMessage(); } ?>