This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
khosb/includes/kohana/modules/userguide/guide/fr-fr/tutorials.orm.md
2011-05-03 09:49:01 +10:00

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.