121 lines
4.4 KiB
Markdown
121 lines
4.4 KiB
Markdown
|
# ORM {#top}
|
||
|
|
||
|
Kohana 3.0 inclus un module [ORM](http://en.wikipedia.org/wiki/Object-relational_mapping) puissant utilisant le pattern active record et l'introspection de base de données pour déterminer les informations sur les colonnes d'un modèle.
|
||
|
|
||
|
Bien que le module ORM soit inclus par défaut dans vos installations de Kohana 3.0, il est désactivé par défaut. Pour l'activer modifiez le fichier `application/bootstrap.php` et ajoutez à l'appel [Kohana::modules] le module ORM:
|
||
|
|
||
|
Kohana::modules(array(
|
||
|
...
|
||
|
'orm' => MODPATH.'orm',
|
||
|
...
|
||
|
));
|
||
|
|
||
|
## Configuration {#configuration}
|
||
|
|
||
|
Pour pouvoir utiliser l'ORM, il faut tout d'abord faire hériter vos modèles de la classe ORM comme suit:
|
||
|
|
||
|
class Model_User extends ORM
|
||
|
{
|
||
|
...
|
||
|
}
|
||
|
|
||
|
Dans l'exemple ci-dessus, le modele cherchera une table `users` dans la base de données par défaut.
|
||
|
|
||
|
### Propriétés d'un modèle ORM
|
||
|
|
||
|
Les propriétés suivantes peuvent être utilisées pour configurer chacuns de vos modèles:
|
||
|
|
||
|
Type | Option | Description | Valeur par défaut
|
||
|
----------|-----------------|--------------------------------------| -------------------------
|
||
|
`string` | _table_name | Nom de la table |
|
||
|
`string` | _db | Nom de la base de données |`default`
|
||
|
`string` | _primary_key | Colonne contenant la clé primaire |`id`
|
||
|
`string` | _primary_val | Colonne contenant la valeur primaire |`name`
|
||
|
|
||
|
## Utiliser l'ORM
|
||
|
|
||
|
### Charger un enregistrement
|
||
|
|
||
|
Pour créér une instance d'un modèle, il faut utiliser la méthode [ORM::factory] ou passer directement par le constructeur:
|
||
|
|
||
|
$user = ORM::factory('user');
|
||
|
// ou
|
||
|
$user = new Model_User();
|
||
|
|
||
|
Les 2 méthodes ci-dessus peuvent prendre en argument la valeur de la clé primaire de l'élément que l'on souhaite charger:
|
||
|
|
||
|
// Charge l'utilisateur d'ID 5
|
||
|
$user = ORM::factory('user', 5);
|
||
|
|
||
|
[ORM::loaded] permet de savoir si un modèle donné a été chargé avec succès.
|
||
|
|
||
|
### Rechercher un enregistrement
|
||
|
|
||
|
L'ORM supporte la plupart des méthodes [Base de données](tutorials.databases) pour affiner les recherches sur les données du modèle. Pour avoir une liste complète, référez vous à la propriété `_db_methods`. Les enregistrements sont récupérés lors de l'appel à [ORM::find] ou [ORM::find_all].
|
||
|
|
||
|
// Le code ci-dessous récupère le premier utilisateur actif prénommé Bob
|
||
|
$user = ORM::factory('user')
|
||
|
->where('active', '=', TRUE)
|
||
|
->where('name', '=', 'Bob')
|
||
|
->find();
|
||
|
|
||
|
// Le code ci-dessous récupère tous les utilisateur actifs Bob
|
||
|
$users = ORM::factory('user')
|
||
|
...
|
||
|
->find_all();
|
||
|
|
||
|
Lors de la récupération d'une liste de modèles par la méthode [ORM::find_all], le parcours des éléments se fait comme pour les résultats de base de données:
|
||
|
|
||
|
foreach ($users as $user)
|
||
|
{
|
||
|
...
|
||
|
}
|
||
|
|
||
|
### Accès aux propriétés d'un Modèle
|
||
|
|
||
|
Toutes les propriétés d'un modèle sont accessibles en utilisant les méthodes magiques `__get` et `__set`.
|
||
|
|
||
|
$user = ORM::factory('user', 5);
|
||
|
|
||
|
// Affiche le nom de l'utilisateur
|
||
|
echo $user->name;
|
||
|
|
||
|
// Change le nom de l'utilisateur
|
||
|
$user->name = 'Bob';
|
||
|
|
||
|
Pour stocker des informations/propriétés qui n'ont pas de correspondances dans la table (c'est-à-dire aucune colonnes du même nom que la propriété), il faut utiliser la propriété `_ignored_columns`:
|
||
|
|
||
|
class Model_User extends ORM
|
||
|
{
|
||
|
...
|
||
|
protected $_ignored_columns = array('field1', 'field2', ...)
|
||
|
...
|
||
|
}
|
||
|
|
||
|
### Créér et sauvegarder des enregistrements
|
||
|
|
||
|
La méthode [ORM::save] est utilisée aussi bien pour créer et sauvegarder de nouveaux enregistrements que pour mettre à jour des enregistrements existants.
|
||
|
|
||
|
// Création d'un enregistrement
|
||
|
$user = ORM::factory('user');
|
||
|
$user->name = 'New user';
|
||
|
$user->save();
|
||
|
|
||
|
// Mise à jour d'un enregistrement
|
||
|
$user = ORM::factory('user', 5);
|
||
|
$user->name = 'User 2';
|
||
|
$user->save();
|
||
|
|
||
|
Vous pouvez mettre à jour plusieurs enregistrements à la fois en utilisant la méthode [ORM::save_all]:
|
||
|
|
||
|
$user = ORM::factory('user');
|
||
|
$user->name = 'Bob';
|
||
|
|
||
|
// Change le nom de tous les utilisateurs actifs à Bob
|
||
|
$user->where('active', '=', TRUE)->save_all();
|
||
|
|
||
|
[ORM::saved] permet de vérifier si le modèle a bien été sauvegardé.
|
||
|
|
||
|
### Supprimer des enregistrements
|
||
|
|
||
|
La suppression d'enregistrements se fait avec [ORM::delete] et [ORM::delet_all]. Ces méthodes fonctionnement de manière similaire à celles de sauvegarde détaillées plus haut à l'exception du fait que [ORM::delete] peut prendre en argument l'`id` de l'enregistrment à supprimer.
|