0% ont trouvé ce document utile (0 vote)
26 vues9 pages

6 Orm 2020

Transféré par

yhammadachee
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
26 vues9 pages

6 Orm 2020

Transféré par

yhammadachee
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

09/08/2020

ORM

La gestion optimale du tiers de données


A. SIDER
Université de Bejaia

Sommaire
• What is an ORM ?
• Why an ORM ?
• ORM examples en Java, en Php, .Net …
• ORM « Eloquent » de Laravel avec des
exemples

A. SIDER-Université de Bejaia-2020 2

1
09/08/2020

What is ?
• ORM : Object Relation Mapper
– Correspondance objet <-> relation
• Une technique qui permet d’interroger et de
manipuler les données d’une BD en utilisant un
paradigme orienté objet
• Par abus de langage , un ORM est une librairie de
fonctions qui implémente la technique ORM
• Un ORM est une libraire écrite dans le langage de
votre choix et qui encapsule le code nécessaire
pour la manipulation des données
A. SIDER-Université de Bejaia-2020 3

Why…? Un exemple imaginaire


• On suppose qu’on a une classe Book
– On souhaite retrouver tous les livres dont l’auteur
est ‘Linus’
book_list = new List();
sql = "SELECT book FROM library WHERE author = 'Linus'";
data = query(sql); // I over simplify ...
while (row = [Link]())
{
book = new Book();
[Link]([Link]('author');
book_list.add(book);
}

A. SIDER-Université de Bejaia-2020 4

2
09/08/2020

Whay…Un exemple imaginaire (2)


• Avec un ORM
book_list = [Link](author="Linus");

• La partie mécanique est prise en charge


automatiquement par la librairie de l’ORM

A. SIDER-Université de Bejaia-2020 5

Why and ORM


• Il permet d’abstraire la partie SGBD, ce qui
permet de changer de SGBD très facilement
• Vous n’avez pas à écrire du code SQL
• Plus sain : l’utilisation des « prepared
statements » ou des transaction se fait avec
un simple appel de méthode objet
• Il nous force à écrire du code en MVC, ce qui
le rend plus clair

A. SIDER-Université de Bejaia-2020 6

3
09/08/2020

Examples of ORMs
• Java: Hibernate, EclipseLink, TopLink…
• PHP: Propel (Symphony) ou Doctrine,
Eloquent (Laravel).
• Python: Django ORM ou SQLAlchemy
• C#: NHibernate ou Entity Framework

A. SIDER-Université de Bejaia-2020 7

Un mot sur JPA


• JPA : Java Persistance API
– Une spécification d’une API pour ORM faisant partie
de Java
– Permet d’utiliser soit un fichier XML soit des
annotations (Java > 6) pour indiquer
• Les entités (et les noms de tables correspondant)
• Les attributs (et les champs qui correspondent)
• Les clés primaires, étrangères, etc.
• Hibernate, EclipseLink et TopLink sont des ORM
Java qui implémente JPA
• Il existe aussi NPA (.Net Persistance API)

A. SIDER-Université de Bejaia-2020 8

4
09/08/2020

Eloquence ORM
• Eloquence est l’ORM de Laravel
• [Link]
• Definir un Modèle :
– Namespace :
Illuminate\Database\Eloquent\Model
– php artisan make:model User crée un fichier
[Link]
– class User extends Model {}

A. SIDER-Université de Bejaia-2020 9

ORM Eloquent
• Par défault le nom de la table est supposé être
users dans le SGBD
• Si on souhaite faire autrement :
class User extends Model {
protected $table = 'my_users’;
}
-Eloquent suppose aussi l’existence d’un champs
applelé « id »
-On peut définir le champs qui sert de clé primaire
avec : primaryKey

A. SIDER-Université de Bejaia-2020 10

5
09/08/2020

Requêtes Select
• Dans un controlleur :
– Retrouver tous les utlisateurs :
• $users = User::all();
– Retrouver un enregistrement en iutlisant la clé
primaire:
• $user = User::find(1); print $user->name;
– Retrouver un modèle par la clé primaire ou génrer
une exception :
• $model = User::findOrFail(1);
• $model = User::where('votes', '>', 100)->firstOrFail();

A. SIDER-Université de Bejaia-2020 11

Requêtes Select (suite)


• Retrouver 10 enregistrement avec une clause
select :
$users = User::where('votes', '>', 100)->take(10)->get();
foreach ($users as $user) {
var_dump($user->name);
}

A. SIDER-Université de Bejaia-2020 12

6
09/08/2020

Requêtes d’insertion
• Enregistrer un modèle
$user = new User;
$user->name = 'John’;
$user->save();

A. SIDER-Université de Bejaia-2020 13

Création de tuples (insertion)


// Créer un nouveau user dans la base...
$user = User::create(['name' => Jughurta']);
// Chercher le user par ses attributs, ou le créer s’il
n’existe pas...
$user = User::firstOrCreate(['name' => Jughurta']);
// Chercher le user par les attributs, ou instancier
une nouvelle instance...
$user = User::firstOrNew(['name' => Jughurta']);

A. SIDER-Université de Bejaia-2020 14

7
09/08/2020

Mettre à jour (update)


• $user = User::find(1); //find utilse la clé
primaire
$user->email = 'john@[Link]’;
$user->save();
• Mettre à jour un modèle et ses relations (1-n,
n-n, etc.)
$user->push();
• Mettre à jour un ensemble de modèles
$affectedRows = User::where('votes', '>', 100)->update(['status' => 2]);

A. SIDER-Université de Bejaia-2020 15

Supprimer un modèle
• Supprimer par clé :
$user = User::find(1);
$user->delete();
• Supprimer un ensemble de modèles
– $affectedRows = User::where('votes', '>', 100)->delete();

A. SIDER-Université de Bejaia-2020 16

8
09/08/2020

Relations n-aires
• One to One:
class User extends Model {
public function phone() {
return $this->hasOne('App\Phone'); }
}
Ici la méthode User::phone va faire un “select” sur
la table phones du modèle Phone

A. SIDER-Université de Bejaia-2020 17

• Relation one to many


class Post extends Model {
public function comments() {
return $this->hasMany('App\Comment’);
}
}
• Maintenant on peut accéder aux commentaires d’un Post
$comments = Post::find(1)->comments;
• On peut enchaîner des conditions
$comments = Post::find(1)->comments()->where('title', '=', 'foo')->first();

A. SIDER-Université de Bejaia-2020 18

Vous aimerez peut-être aussi