[[acces_a_la_base_de_donnee]]
Table of Contents

Accés à la base de donnée

La classe SQLObject vous permet d’accéder aux données de manière ultra simplifiée. Le but de cette classe est notamment de vous éviter de réecrire indefinimant les requetes de base (sauver, modifier, recupérer des enregistrements par leur identifiant…).

Si vous aviez une table personne, voila ce que l’on pourrait ecrire pour enregistrer une nouvelle personne :

$personne = new Personne(array('nom' => 'julien', 'age' => 20));

Personne étant une classe héritant de SQLObjet. En contre partie, pour que ceci fonctionne, il faut respecter certaines conventions de nommage :

Par exemple, avec une table personne, ainsi qu’une table telephone stockant les numeros de telephone appartenant aux personnes, ca donnerait à peut près ça :

CREATE TABLE `personne` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nom` varchar(100) NOT NULL,
  PRIMARY KEY  (`id`)
);

CREATE TABLE `telephone` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `personne_id` int(11) NOT NULL,
  `numero` varchar(10) NOT NULL,
  PRIMARY KEY  (`id`)
);

Les exemples qui suiveront, utiliseront les deux tables ci-dessus.

Création des classes

Les classes Personne et Telephone vont permettrent de manipuler les données situées dans les deux tables du même nom. Leur création est trés simple, en fait, elles servent juste à redefinir quelques paramètres de la classe parent SQLObjet. De plus vous pouvez utiliser le scripts scripts/create_model.py afin de faire ce travaille automatiquement :

$ python script/create_model.py Personne > myApp/Models/PersonneModel.php
$ python script/create_model.py Telephone > myApp/Models/TelephoneModel.php

Fichier Models/PersonneModel.php :

require_once FRAMEWORK_DIR.'SQLObject.php';

class PersonneModel extends SQLObject {

    function PersonneModel($fields = array()) {
        parent::SQLObject('personne', __CLASS__, $fields);
    }
}
?>

Fichier Models/TelephoneModel.php :

require_once FRAMEWORK_DIR.'SQLObject.php';

class TelephoneModelextends SQLObject {

    function TelephoneModel($fields = array()) {
        parent::SQLObject('telephone', __CLASS__, $fields);
    }
}
?>

Ajouter une entrée

Création d’une personne nommée “julien” ayant pour numero de téléphone : “01 01 01 01 01”

require_once 'Personne.php';
require_once 'Telephone.php';

$p = new Personne(array('nom'=> 'julien'));
$p->save();

$t = new Telephone(array('personne_id' => $p->get('id'), 'numero' => '01 01 01 01 01'));
$t->save();

Récupérer un enregistrement

Il existe plusieurs manières de recupérer un enregistrement.

Pour récupérer la personne dont l’id vaut 4 :

require_once 'Personne.php';

$p = new Personne();
$p = $p.find(4);

echo $p->get('nom');

Pour récupérer une personne à l’aide d’une condition quelconque, par exemple, la première personne dont le nom est égale à “julien” :

require_once 'Personne.php';

$p = new Personne();
$p = $p.findFirst("nom = 'julien'");

echo $p->get('nom');

Modifier un enregistrement

require_once 'Personne.php';

$p = new Personne();
$p = $p.findFirst("nom = 'julien'");

$p->set('nom', 'juju'); // change le nom
$p->save(); // sauve les changements

echo $p->get('nom');

Dans cette exemple, on commence par recupérer la personne qui s’appelle “julien”, puis on la renomme en “juju”, puis pour finir on sauve les modifs dans la base à l’aide de la méthode save()

Récupérer une série d'enregistrement

On va maintenant voir comment séléctionner une serie d’enregistrement.

Affiche toutes les personnes :

require_once 'Personne.php';

$p = new Personne();
$personnes = $p.findAll();

while ($p = personnes->next()) {
    echo $p->get('nom').'<br>';
}

Affiche toutes les personnes avec une condition sur le nom :

(...)
$p = new Personne();
$personnes = $p.findAll("nom LIKE %ul%");
(...)

Affiche toutes les numeros de téléphone liés à “julien”:

require_once 'Personne.php';

$p = new Personne();
$p = $p.findFirst("nom = 'julien'");

$telephones = $p->findRelated('telephone')

while ($t = telephones->next()) {
    echo $t->get('numero').'<br>';
}

Si les méthodes par défaut ne vous suffisent pas, vous pouvez bien sûr ecrire vos propres requêtes :

require_once 'Personne.php';

$p = new Personne();
$personnes = $p.findBySql("SELECT * FROM personne, telephone WHERE personne.id = telephone.personne_id");

while ($p = personnes->next()) {
    echo $p->get('nom').'<br>';
}
acces_a_la_base_de_donnee.txt · Last modified: 2004/10/16 20:48
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki