4.4 KiB
ORM
Kohana 3.0 inclus un module ORM 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
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 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.