3.5. Zend_Db_Table_Row
Précédent | Chapitre 3. Zend_Db | Suivant

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

Précédent | Niveau supérieur | Suivant
3.4. Zend_Db_Table | Sommaire | 3.6. Zend_Db_Table_Rowset