laravel many to many

Exemple De Relations Plusieurs À Plusieurs en Laravel

Temps de lecture: 5 minutes

Les relations plusieurs à plusieurs (many to many) sont légèrement plus compliquées que les relations hasOne et hasManyLes relations plusieurs à plusieurs sont définies en écrivant une méthode qui renvoie le résultat de la  propriété belongsToMany.

Dans notre exemple, nous définirons les deux modèles.

  1. Catégorie
  2. Produit

Dans notre exemple, plusieurs catégories ont plusieurs produits et une relation inverse signifie que plusieurs produits appartiennent à plusieurs catégories .

Donc, ce que nous pouvons faire, c’est que, lorsque nous allons dans la catégorie particulière , nous devons afficher tous les produits .

De même, lorsque nous voyons le produit particulier , nous devons afficher toutes les catégories appartenant à ce produit spécifique .

Prenons un  exemple de relation Laravel plusieurs à plusieurs et commençons à travailler sur cela.


Exemple de relations Plusieurs à Plusieurs

Nous commençons cet exemple en installant le projet Laravel 5.6 .

Étape 1: Installez Laravel 5.6.

Allez dans le projet

Ouvrez le projet dans votre éditeur.

Première chose, configurez la base de données.

Étape 2: Créez un modèle et une migration.

Nous définissons deux modèles pour notre exemple.

  1. Category
  2. Product

Il créera des tables et des modèles de produits et de catégories.

Maintenant, dans  create_categories_table,  définissez le schéma suivant.

Ecrivez aussi le schéma suivant dans  create_products_table.

Maintenant, allez au terminal et créez les tables en utilisant la commande suivante.

Étape 3: Définissez les catégories aléatoires manuellement.

Nous allons créer trois catégories manuellement dans la table de base de données.


Nous avons donc défini manuellement trois catégories.

Étape 4: Définir le tableau croisé dynamique.

Nous avons déjà défini deux schémas de table 1) Category 2) Product.

Maintenant, nous devons définir la troisième table, qui est la table pivot. 

Le tableau croisé dynamique est la relation entre deux tableaux.

Dans le tableau croisé dynamique on a ces colonnes.

  1. identifiant
  2. category_id
  3. product_id

Pour créer un fichier de migration, tapez la commande suivante.

Définissez maintenant le schéma suivant dans le fichier de migration.

Maintenant, migrez en utilisant la commande suivante.

Étape 5: Définissez les relations.

Maintenant, plusieurs catégories appartiennent à plusieurs produits. Donc, à l’intérieur du  fichier Product.php  , nous pouvons définir la  relation d’ appartenance .

Même chose pour les produits. Plusieurs produits appartiennent à plusieurs catégories. Donc, à l’intérieur du  fichier Category.php  , nous pouvons définir la  relation d’ appartenance  .

Nous avons donc défini la relation entre eux.

Créons maintenant un nouveau produit et affectons la catégorie au produit.

Étape 6: Créer un produit.

Dans un scénario en temps réel, nous créons un formulaire puis, via une requête POST , nous insérons les données du produit dans la table. Cependant, dans cet exemple, nous ne définirons aucun formulaire, nous stockons directement les données dans la base de données, car notre objectif est de savoir comment utiliser plusieurs relations entre elles dans le scénario complexe.

Définissez maintenant une route qui enregistre le produit dans la base de données et assigne le produit à la catégorie en utilisant plusieurs relations. Maintenant, nous avons quatre (4) catégories.Nous créons donc un produit et attribuons les deux catégories à un produit.

Tout d’abord, créez un ProductController à l’aide de la commande suivante

Prochaine étape, définissez la route pour stocker le produit.

Maintenant, j’utilise la requête GET pour la sauvegarde des données car nous n’avons pas créé le formulaire, nous prenons donc toutes les données manuellement.

Importez les deux modèles dans ce  fichier ProductController.php  .

De plus, nous allons créer un produit appartenant à plusieurs catégories.

Dans cet exemple, nous allons créer un produit appelé  God of War.

God of War appartient maintenant à deux catégories.

  1. Video Games
  2. Playstation

Ainsi, lorsque nous créons un produit, nous devons également renseigner le tableau croisé dynamique avec les deux catégories.

Donc, notre product_id sera le même, mais le category_id sera différent afin de créer deux lignes dans la table category_product  .

A présent, écrivez le code suivant dans  la fonction create() de ProductController  .

Explication.

Tout d’abord, nous avons créé le produit et l’avons enregistré dans la table des produits  .

Maintenant, il est temps d’assigner les catégories au produit nouvellement créé.

Comme nous avons juste besoin d’un identifiant de catégorie, j’ai codé manuellement pour l’instant, mais en temps réel, vous avez ces identifiants dans la demande de formulaire.

Maintenant, la fonction attach() assignera ces identifiants de catégorie au produit nouvellement créé et créera également deux nouvelles lignes dans la table pivot. Chaque ligne a une relation avec son produit et sa catégorie .

La prochaine étape est l’URL suivante:  http: //relationships.test/product/create  ou http: // localhost: 8000 / product / create

Vous pouvez voir le résultat.

A présent, accédez à la base de données et consultez la  table des produits  .

Yayy !!, nous avons associé avec succès les deux catégories à un seul produit.

L’étape suivante consiste à afficher les informations sur le produit et à afficher toutes les catégories à l’intérieur de ce produit.

Étape 7: Affichez les informations sur le produit.

Définissez la route pouvant afficher toutes les informations.

Définissez maintenant la fonction show de ProductController .

Quel que soit l’identifiant de produit que nous transmettons dans la requête get, nous extrayons directement les détails du produit et transmettons ces détails du produit à la vue.

Créez un nouveau dossier dans le dossier de  views appelé  products  et créez un fichier appelé show.blade.php.

Écrivez le code suivant dans le  fichier show.blade.php  . Nous affichons le nom du produit, le prix et les catégories auxquelles il appartient.

Comme nous avons défini la relation, nous pouvons directement extraire toutes les catégories du modèle Product, et c’est la magie des relations éloquentes dans Laravel.

Maintenant, allez à cette URL:  http: //relationships.test/product/1  ou http: // localhost: 8000 / product / 1

Comme vous pouvez le constater, nous n’avons créé qu’un seul produit, de sorte que nous ne pouvons voir qu’un seul détail.

Vous pouvez donc ajouter plusieurs catégories à un produit et en afficher plusieurs.

Vous pouvez désormais créer autant de produits que vous le souhaitez et lui attribuer plusieurs catégories.

Vous pouvez également supprimer la relation entre les tables à l’aide de la fonction detach ().

fonction detach()

Définissez maintenant la route suivante

Ensuite, tapez cette URL:  http: //relationships.test/category/product/1  ou http: // localhost: 8000 / category / product / 1

Appuyez sur Entrée, et vous verrez que ça marche, passez maintenant au survol de la base de données MySQL et consultez la  table category_product  .

Vous pouvez voir que la ligne category_id = 3 est supprimée et que nous ne faisons plus partie de category_id = 3.

  • Merci d’avoir lu !  Si vous avez aimé cet article,
  • Faites un coucou sur : Instagram | Facebook | Twitter |
  • Avez-vous besoin d’aide pour votre projet web ? Ecrivez moi à l’adresse suivante : david@oschool.ci
  • Téléchargez gratuitement mes livres ici
Deviens toi aussi développeur web !
I agree to have my personal information transfered to MailChimp ( more information )
Commences ta carrière de développeur web, GRATUITEMENT, ici et maintenant !
Je hais les sapms. Votre adresse email ne sera jamais vendu ou partagé avec un tiers
Partages à tous tes amis !

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.