ソーシャルネットワーク機能のための 3 つのテーブルとの Laravel 結合
Laravel では、複数のテーブルを操作する場合、結合の実行方法を理解することが重要です効率的な運用を実現します。このシナリオでは、特定のユーザーがフォローしているユーザーから投稿を取得することを目的としています。
データベース テーブル
関係するテーブルは 3 つあります:
データベース クエリを使用したクエリ
1 つのオプションは、Laravel のデータベース クエリ ビルダーを使用することです。クエリの構築方法は次のとおりです。
<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>
モデルアプローチ
あるいは、より構造化されたタイプセーフなアプローチとして、Laravel の Eloquent ORM を使用することもできます。各テーブルのモデルを定義します:
<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>
次に、次のクエリを使用できます:
<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>
このクエリは、フォローしているユーザーによるすべての共有を取得し、共有したユーザーを積極的に読み込みます。
以上がLaravel Join オペレーションを使用してソーシャルネットワークでフォローしているユーザーから投稿を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。