Object-Relational Mapping

De OviWiki
Révision de 17 juin 2009 à 16:53 par Jeraiz (discussion | contributions) (Requêtes)

Aller à : navigation, rechercher

La librairie LibOrm (Object-Relational Mapping) est une bibliothèque de correspondance entre la base de données et des objets PHP. Elle facilite la définition des tables de données et les requêtes SQL.

Le module LibOrm est disponible sur CVS : [1]

Le chemin complet de la fonctionnalité
LibOrm
Documentation du parent
Pas de parent
Module
LibOrm
version du module
0.6.3


getDescription

Méthode commune à toutes les librairies pour obtenir la description de l'objet partagé.

$instance = bab_functionality::get('LibOrm');

$description = $instance->getDescription();


--> Cette page ne recense pas toutes les possibilités de la librairie. Elle donne un aperçu des fonctions permettant de débuter dans l'utilisation de la librairie.

Exemple

Nous travaillons sur un module d'Ovidentia qui requiert la librairie LibOrm. Pour plus d'explications sur la méthode d'intégration d'une librairie dans un module : Fichiers spécifiques des modules.

Dans notre module, nous gérons 2 tables de données : Contact et AdressePostale. Ces 2 tables sont liées car 1 contact a 1 adresse postale.

Les tables de données

Définition de la structure de la table AdressePostale. Il est indispensable de terminer le nom de la classe par Set.

<source lang="php"> class monmodule_AddressePostaleSet extends ORM_MySqlRecordSet {

  function __construct() {
     parent::__construct();
     
    $this->setPrimaryKey('id');
    $this->addFields(
       ORM_TextField('rue')->setDescription('Street'),
       ORM_StringField('codepostal', 10)->setDescription('Zip code'),
       ORM_StringField('ville', 60)->setDescription('City')
    );
  }

} </source>

Définition de la classe AdressePostale en tant qu'enregistrement (record). Lorsque la librairie LibOrm retournera une ligne de la table AdressePostale, la librairie retournera un objet de la classe AdressePostale. Remarque : si vous n'avez pas besoin de personnaliser la classe d'enregistrement, il n'est pas nécessaire de la créer. Elle sera automatiquement créée par la librairie à partir du nom de la classe AdressePostaleSet.

<source lang="php"> class monmodule_AddressePostale extends ORM_MySqlRecord {

} </source>


Définition de la structure de la table Contact :

<source lang="php"> class monmodule_ContactSet extends ORM_MySqlRecordSet {

  function __construct() {
     parent::__construct();
    
     $this->setPrimaryKey('id');
     $this->addFields(
        ORM_StringField('nom', 80)->setDescription('Nom'),
        ORM_StringField('prenom', 80)->setDescription('Prénom'),
        ORM_StringField('poste', 50)->setDescription('Métier'),
        ORM_StringField('bureau', 15)->setDescription('Bureau'),
        ORM_StringField('telephone', 30)->setDescription('Téléphone'),
        ORM_StringField('fax', 30)->setDescription('Fax'),
        ORM_StringField('mobile', 30)->setDescription('Téléphone Mobile'),
        ORM_StringField('email', 255)->setDescription('E-mail')
     );
     $this->hasOne('addressepostale', 'monmodule_AddressePostaleSet');
  }

} </source>

Définition de la classe Contact en tant qu'enregistrement (record).

<source lang="php"> class monmodule_Contact extends ORM_MySqlRecord {

} </source>

Utilisation de la librairie et initialisation

<source lang="php"> bab_functionality::get('LibOrm')->initMySql(); $mysqlbackend = new ORM_MySqlBackend($GLOBALS['babDB']); ORM_MySqlRecordSet::setBackend($mysqlbackend); </source>

Requêtes : récupérer des données