ORM Eloquent avec Laravel 5.5

Définir les relations entre vos modèles – Eloquent & Laravel

L’objectif de cette suite de tutoriels sur Laravel 5.5 est de permettre au développeur Web de déployer une API REST de qualité sur le Net.

L’objectif de ce tutoriel est de mettre en place des relations entre les tables grâce à l’ORM fourni par Laravel : Eloquent.

Récits utilisateur proposés

  1. En tant qu’utilisateur, j’aimerais pouvoir gérer les informations de mon profil.En tant qu’utilisateur, j’aimerais que mon profil soit public.
  2. En tant qu’utilisateur, j’aimerais être le seul à définir les informations de mon profil.
    1. Date de naissance, adresse de mon site web, adresse de mon profil Facebook et adresse de mon profil LinkedIn.
    2. Noms des champs :
      1. ddn, web_site_url, facebook_url, linkedin_url

Relations entre les modèles Eloquent

  • One To One 1 à 1
  • One To Many 1 à plusieurs
  • One To Many (Inverse) 1 à plusieurs inversé
  • Many To Many plusieurs à plusieurs (avec table intermédiaire)

Lecture sur les relations

Plan de match pour ce tutoriel

  1. Créer un nouveau modèle nommé Profile.
  2. Définir les relations entre User et Profile.
  3. Définir la migration pour la nouvelle table Profile avec les bons champs.
  4. Définir les données de test.
  5. Créer un contrôleur.
  6. Créer les routes.
  7. Tester la nouvelle fonctionnalité.
  8. Réusiner les tests précédents au besoin.
  9. Publier sur GitLab.

Relation 1 à 1 avec la table Profile

Créer une nouvelle branche «Profile relation »

$ git checkout -b « profile-relation-with-user »

Créer un nouveau modèle avec tout le tralala

$ php artisan make:model Profile –all

Y inscrire la relation vers le modèle User :

public function user()
{
return $this->belongsTo(‘App\User’);
}

Modifier le modèle User pour y ajouter la relation vers le modèle Profile :

public function profile()
{
return $this->hasOne(‘App\Profile’);
}

Implémenter la migration de la table Profile.


$table->integer(‘user_id’)->unsigned();
$table->foreign(‘user_id’)->references(‘id’)->on(‘users’);

Vérifier le bon fonctionnement de la migration :

$ php artisan migrate:fresh

Ajouter des données de test en associant le profil avec un utilisateur :

$ php artisan make:seed ProfilesTableSeeder

Vérifier que la migration et les données de test s’exécutent convenablement :

$ php artisan migrate:fresh –seed

Lancer tinker pour exécuter quelques requêtes à l’ORM :

$ php artisan tinker
>>> App\User::find(1)->profile;
>>> App\User::with(‘profile’)->find(1);

>>> App\Profile::find(1)->user->id;
>>> App\Profile::find(1)->user;

Modifier la classe User en y ajoutant la ligne suivante :

protected $with = [‘profile’];

Quel est l’impact de ce changement?

$with

$with oblige l’ORM à charger le profil lorsque l’utilisateur est chargé (eager loading)

Prendre une pause

La position assise est très dommageable pour la santé. De plus, regarder un écran pendant plus de 20 minutes est aussi mauvais. Prenez le temps de vous lever et de vous étirer durant 45 secondes. Durant les prochaines 30 minutes, tenter de travailler debout.

Prêt pour les la création des routes?

Définir les routes : GET, PUT

Route::get(‘users/{user}/profile’, ‘ProfileController@show’);
Route::put(‘users/{user}/profile’, ‘ProfileController@update’);

Définir les actions du contrôleur ProfileController

public function show(User $user)
{
return $user->profile;
}

public function update(Request $request, User $user)
{
$user->profile->facebook_url = $request->facebook_url;

$user->profile->save();
return $user->profile;
}

Attention

Quel est l’impact de modifier (PUT) le profil d’un utilisateur qui n’a pas encore de profil?
Quelle solution avez-vous mis en place pour éviter le code 500?

Tester

Tester le bon fonctionnement de la relation, des actions et des routes.
Écrire les tests :

  • GET.
  • PUT sur un utilisateur sans profil.
  • PUT sur un utilisateur avec profil existant.

Lancer les tests

$ vendor/phpunit/phpunit/phpunit –filter ProfileControllerTest

Réusinage du code

Faire un survol du travail réalisé et faire le ménage.

$ git status

Lancer les tests :

$ vendor/phpunit/phpunit/phpunit

Publier sur Gitlab

Finalement, faire un merge sur master et publier votre travail sur GitLab :

$ git add .
$ git commit -m « User has profile »
$ git push

Bravo!

Bravo, votre environnement de développement avec Homestead, Vagrant, PHP, MySQL est fonctionnel.

Configurons une application qui utilise le cadriciel Laravel.

Références et lectures

  • https://www.getpostman.com/
  • https://github.com/symfony/symfony/
  • https://vagrantup.com/downloads.html

Passport pour Laravel 5.5

La prochaine étape consister à ajouter Passport, la couche d’authentification et d’autorisation à votre API REST. Vous pourrez ainsi contrôler les utilisateurs de votre plate-forme.

Pour terminer en beauté, merci de partager!


Comments

comments