3.5. Zend_Db_Table_Row

3.5.1. Introduction

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().

3.5.2. Aller chercher une ligne

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'
//

?>
        

3.5.3. Modifier les valeurs

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();
}
?>