Laravel Join avec trois tables pour la fonctionnalité des réseaux sociaux
Dans Laravel, lorsque vous travaillez avec plusieurs tables, il est essentiel de comprendre comment effectuer une jointure opérations de manière efficace. Dans ce scénario, notre objectif est de récupérer les publications des utilisateurs suivis par un utilisateur spécifique.
Tables de base de données
Nous avons trois tables impliquées :
Requête à l'aide de requêtes de base de données
Une option consiste à utiliser le générateur de requêtes de base de données de Laravel. Voici comment construire la requête :
<code class="php">$shares = DB::table('shares') ->leftjoin('followers', 'shares.user_id', '=', 'followers.follower_id') ->leftjoin('users', 'followers.user_id', '=', 'users.id') ->where('users.id', 3) ->where('shares.user_id', 'followers.follower_id') ->get();</code>
Approche modèle
Vous pouvez également utiliser l'ORM éloquent de Laravel pour une approche plus structurée et plus sécurisée. Définissez des modèles pour chaque table :
<code class="php">// User model class User extends Model { public function shares() { return $this->hasMany('Share'); } public function followers() { return $this->belongsToMany('User', 'follows', 'user_id', 'follower_id'); } } // Share model class Share extends Model { public function user() { return $this->belongsTo('User'); } }</code>
Ensuite, vous pouvez utiliser la requête suivante :
<code class="php">$my = User::find('my_id'); // Eager load 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.*'); foreach ($shares as $share) { echo $share->user->username; }</code>
Cette requête récupère tous les partages des utilisateurs que vous suivez et charge avec impatience les utilisateurs qui ont partagé eux.
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!