| auteur : Guillaume Rossolini |
Doctrine permet d'utiliser une base de données sans écrire de requêtes SQL, en utilisant des classes personnalisées.
Il faut mettre les classes personnalisées (dérivées de Doctrine_Record) dans un répertoire, par exemple "/models", ce qui permet à Doctrine de les utiliser pour deviner la structure de la base de données (c'est la persistance).
Chaque classe doit définir sa structure (ses champs) et les relations avec les autres classes. Doctrine s'occupe des relations (JOIN entre tables, clefs étrangères).
|
| auteur : Guillaume Rossolini |
Avec Doctrine, il y a deux manières de gérer la persistance des objets vers la BDD : tout un répertoire de classes, ou bien une liste précise de classes.
Structure des répertoires : | models
User.php
Message.php
|
models/User.php | <?php
class User extends Doctrine_Record
{
public function setTableDefinition()
{
$this ->hasColumn (' name ' , ' string ' , 15 );
$this ->hasColumn (' password ' , ' string ' , 40 );
}
}
?>
|
Exporter toutes les classes d'un répertoire : | <?php
require_once ' classes/Doctrine.php ' ;
spl_autoload_register(array (' Doctrine ' , ' autoload ' ));
$pdo = new PDO(' mysql:host=localhost;dbname=developpez ' , ' Yogui ' , ' motdepasse ' );
$ db = Doctrine_Manager: : connection($ pdo );
Doctrine: : export(' models ' );
$db ->export ->export (' models ' );
?>
|
Récupérer les requêtes de persistance de tout un répertoire : | <?php
require_once ' classes/Doctrine.php ' ;
spl_autoload_register(array (' Doctrine ' , ' autoload ' ));
$pdo = new PDO(' mysql:host=localhost;dbname=developpez ' , ' Yogui ' , ' motdepasse ' );
$ db = Doctrine_Manager: : connection($ pdo );
$ queries = Doctrine: : exportSql(' models ' );
$ queries = $db ->export ->exportSql (' models ' );
?>
|
Exporter une liste de classes : | <?php
require_once ' classes/Doctrine.php ' ;
spl_autoload_register(array (' Doctrine ' , ' autoload ' ));
require_once ' models/User.php ' ;
$pdo = new PDO(' mysql:host=localhost;dbname=developpez ' , ' Yogui ' , ' motdepasse ' );
$ db = Doctrine_Manager: : connection($ pdo );
$db ->export ->exportClasses (array (' User ' ));
?>
|
Récupérer les requêtes de persistance d'une liste de classes : | <?php
require_once ' classes/Doctrine.php ' ;
spl_autoload_register(array (' Doctrine ' , ' autoload ' ));
require_once ' models/User.php ' ;
$pdo = new PDO(' mysql:host=localhost;dbname=developpez ' , ' Yogui ' , ' motdepasse ' );
$ db = Doctrine_Manager: : connection($ pdo );
$ queries = $db ->export ->exportClassesSql (array (' User ' ));
?>
|
|
| auteur : Guillaume Rossolini |
C'est le travail de la méthode Doctrine_Record::save(), il faut donc utiliser une classe dérivée de Doctrine_Record.
Prenons l'exemple d'une table "user" :
models/User.php | <?php
class User extends Doctrine_Record
{
public function setTableDefinition()
{
$this ->hasColumn (' name ' , ' string ' , 15 );
$this ->hasColumn (' password ' , ' string ' , 40 );
}
}
?>
|
index.php | <?php
require_once ' doctrine/Doctrine.php ' ;
spl_autoload_register(array (' Doctrine ' , ' autoload ' ));
$pdo = new PDO(' mysql:host=localhost;dbname=developpez ' , ' Yogui ' , ' motdepasse ' );
$ db = Doctrine_Manager: : connection($ pdo );
Doctrine: : export(' models ' );
$user = new User();
$user ->name = ' Yogui ' ;
$user ->password = strval(sha1(' 1234 ' ));
$user ->save ();
$user = new User();
$user ->name = ' BrYs ' ;
$user ->password = strval(sha1(' 4321 ' ));
$user ->save ();
?>
|
|
| auteur : Guillaume Rossolini |
Admettons les tables "user" et "message". Nous allons ajouter deux utilisateurs, ainsi qu'un message au premier utilisateur :
models/User.php | <?php
class User extends Doctrine_Record
{
public function setTableDefinition()
{
$this ->hasColumn (' name ' , ' string ' , 15 );
$this ->hasColumn (' password ' , ' string ' , 40 );
}
public function setUp()
{
$this ->hasMany
(
' Message as messages ' ,
array
(
' local ' = > ' id ' ,
' foreign ' = > ' user_id '
)
);
}
}
?>
|
models/Message.php | <?php
class Message extends Doctrine_Record
{
public function setTableDefinition()
{
$this ->hasColumn (' title ' , ' string ' , 50 );
$this ->hasColumn (' text ' , ' string ' , 1000 );
$this ->hasColumn (' user_id ' , ' integer ' );
}
public function setUp()
{
$this ->hasOne
(
' User ' ,
array
(
' local ' = > ' user_id ' ,
' foreign ' = > ' id ' ,
' onDelete ' = > ' CASCADE '
)
);
}
}
?>
|
<?php
require_once ' doctrine/Doctrine.php ' ;
spl_autoload_register(array (' Doctrine ' , ' autoload ' ));
$pdo = new PDO(' mysql:host=localhost;dbname=developpez ' , ' Yogui ' , ' motdepasse ' );
$ db = Doctrine_Manager: : connection($ pdo );
Doctrine: : export(' models ' );
$user = new User();
$user ->name = ' Yogui ' ;
$user ->password = strval(sha1(' 1234 ' ));
$user ->messages [ 0 ] ->title = ' test ' ;
$user ->messages [ 0 ] ->text = ' Message de test ' ;
$user ->save ();
$user = new User();
$user ->name = ' BrYs ' ;
$user ->password = strval(sha1(' 4321 ' ));
$user ->save ();
?>
|
|
Consultez les autres F.A.Q.
Les sources présentés sur cette page sont libres de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Copyright ©2003
Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de
l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans
de prison et jusqu'à 300 000 E de dommages et intérêts.
Cette page est déposée à la SACD.
|