Laravel Join avec 3 tables : un guide complet
Dans cet article, nous explorerons un moyen efficace de récupérer les données de trois tables en utilisant La puissante fonctionnalité de jointure de Laravel.
Énoncé du problème
Disons que nous avons une application de type Twitter avec trois tables : Utilisateurs, Abonnés et Partages. La table Utilisateurs contient des informations sur les utilisateurs, la table Abonnés représente les relations entre les utilisateurs qui se suivent et la table Partages stocke les publications partagées par les utilisateurs.
Notre objectif est de récupérer tous les partages des utilisateurs qu'un utilisateur spécifique suit. Cela implique de joindre les trois tables pour identifier les données souhaitées.
Approche initiale
L'approche initiale utilisant plusieurs jointures à gauche n'a pas donné les résultats escomptés. L'approche correcte consiste à utiliser une jointure au lieu de jointures gauches et à connecter les tables comme suit :
<code class="php">$shares = DB::table('shares') ->join('users', 'users.id', '=', 'shares.user_id') ->join('followers', 'followers.user_id', '=', 'users.id') ->where('followers.follower_id', '=', 3) ->get();</code>
Dans cette jointure, nous commençons par la table Shares et joignons la table Users en fonction du champ user_id. Ensuite, nous nous joignons à la table Followers en fonction du champ user_id de la table Users et du champ follower_id de la table Followers.
Approche modèle
Si vous utilisez Modèles éloquents, vous pouvez tirer parti de leurs méthodes relationnelles pour simplifier le processus de jointure. Voici un exemple :
<code class="php">$my = User::find('my_id'); // Retrieves all shares by users that I follow // eager loading the "owner" of the share $shares = Share::with('user') ->join('follows', 'follows.user_id', '=', 'shares.user_id') ->where('follows.follower_id', '=', $my->id) ->get('shares.*'); // Notice the shares.* here</code>
Dans cet exemple, nous chargeons avec impatience l'utilisateur qui a partagé chaque publication. Les partages.* sélectionne uniquement les champs de la table des partages, à l'exclusion des tables jointes.
Conclusion
En utilisant la syntaxe de jointure correcte et en tirant parti des relations de modèle éloquentes , vous pouvez récupérer efficacement les données de plusieurs tables dans Laravel. Cette approche vous permet de filtrer et d'accéder facilement à des relations de données complexes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!