Soutenez-nous

FAQ PHPConsultez toutes les FAQ

Nombre d'auteurs : 68, nombre de questions : 580, dernière mise à jour : 29 juillet 2013 

 
OuvrirSommaireBases de donnéesMapping objet relationnel (ORM) et persistanceeZ Components - PersistentObject

Cette bibliothèque utilise PDO, écrite en PHP.

Créé le 20 novembre 2007  par is_null

Lien : Qu'est-ce que PDO ?

Cette bibliothèque a besoin d'eZ Components pour fonctionner. Particulièrement le composant Database, qui permet l'abstraction de bases de données.

Sont actuellement supportés :
  • SQLite ;
  • Oracle ;
  • PostgrSQL ;
  • MySQL.
Créé le 20 novembre 2007  par is_null

Il faut générer un schema de la base de données avec le composant DatabaseSchema.

 
Sélectionnez
<?php
// Créer le schema depuis un fichier XML :
$schema = ezcDbSchema::createFromFile( 'xml', 'schema.xml' );
 
// Créer le schema depuis une base de données
$db = ezcDbFactory::create( 'mysql://user:password@host/database' );
$schema = ezcDbSchema::createFromDb( $db );
 
// Sauvegarder le schema sous forme de tableau dans un fichier PHP
$schema->writeToFile( 'array', 'schema.php' );
 
// Créer les tables dans la base de données à partir du schema
$schema->writeToDb( $db );
?>

La bibliothèque utilisera une définition des objets persistants pour fonctionner.

Créé le 20 novembre 2007  par is_null

Lien : http://ezcomponents.org/docs/api/latest/introduction_DatabaseSchema.htmlDocumentation eZ Components : DatabaseSchema

On utilisera le composant PersistentObjectDatabaseSchemaTiein.

Il faut se placer dans le répertoire racine d'eZ Components (classiquement /usr/share/php/ezc) puis exécuter :

 
Sélectionnez
$ php PersistentObjectDatabaseSchemaTiein/rungenerator.php \
    -s chemin/vers/fichier/de/schema -f array chemin/vers/dossier/de/definitions/d/objets/persistents/

Notez qu'accessoirement, on peut ajouter un paramètre pour générer les objets :

 
Sélectionnez
$ php PersistentObjectDatabaseSchemaTiein/rungenerator.php \
-s chemin/vers/fichier/de/schema -f array chemin/vers/dossier/de/definitions/d/objets/persistents/ chemin/vers/dossier/d/objets/
Créé le 20 novembre 2007  par is_null

Lien : http://ezcomponents.org/docs/api/latest/introduction_PersistentObjectDatabaseSchemaTiein.html
Lien : http://ezcomponents.org/docs/api/latest/introduction_PersistentObject.html

Il suffit d'ajouter les méthodes getState() et setState().

Par exemple :
Sélectionnez
<?php
class Personne
{
    public $nom = null;
    public $id = null;
    
    public function getState()
    {
        return array(
            'id'    => $this->id,
            'nom'   => $this->nom,
        );
    }
    
    public function setState( array $status )
    {
        $this->id   = $status->id;
        $this->nom  = $status->nom;
    }
}
?>
Voici à quoi ressemblerait la définition de sa persistance :
Sélectionnez
<?php
$def = new ezcPersistentObjectDefinition();
$def->table = "persons";
$def->class = "Personne";
 
$def->idProperty = new ezcPersistentObjectIdProperty;
$def->idProperty->columnName = 'id';
$def->idProperty->propertyName = 'id';
$def->idProperty->generator = new ezcPersistentGeneratorDefinition( 'ezcPersistentSequenceGenerator' );
 
$def->properties['nom'] = new ezcPersistentObjectProperty;
$def->properties['nom']->columnName = 'full_name';
$def->properties['nom']->propertyName = 'nom';
$def->properties['nom']->propertyType = ezcPersistentObjectProperty::PHP_TYPE_STRING;
 
return $def;
?>

C'est dans ce fichier qu'il faudra ajouter les définitions de relations.

Créé le 20 novembre 2007  par is_null

Il faut d'abord un objet de session.

 
Sélectionnez
<?php
$session = new ezcPersistentSession(
    ezcDbInstance::get(),
    new ezcPersistentCacheManager( new ezcPersistentCodeManager( "path/to/definitions" ) )
);
 
// Il est utile d'utiliser la classe fournie pour faire maintenir une instance unique
ezcPersistentSessionInstance::set( $session );
 
// Dès lors, il sera possible d'accèder à la session comme cela :
$session = ezcPersistentSessionInstance::get();
 
// La manière la plus simple de charger un objet :
$personne = $session->load( 'Personne', $identifiant );
?>
Créé le 20 novembre 2007  par is_null
 
Sélectionnez
<?php
$personne = new Personne();
$personne->nom = "Guybrush Threepwood";
$session = ezcPersistentSessionInstance::get();
$session->save( $personne );
?>
Créé le 20 novembre 2007  par is_null
 
Sélectionnez
<?php
$session = ezcPersistentSessionInstance::get();
$personne = $session->load( 'Personne', $identifiant );
$personne->nom = "Guybrush Threepwood";
$session->update( $personne );
 
// Notez que vous pouvez également utiliser saveOrUpdate()
$session->saveOrUpdate( $personne );
?>
Créé le 20 novembre 2007  par is_null
 
Sélectionnez
<?php
$session = ezcPersistentSessionInstance::get();
$personne = $session->load( 'Personne', $identifiant );
$session->delete( $personne );
?>
Créé le 20 novembre 2007  par is_null
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2003 Developpez.com 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'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.