Laravel Join オペレーションを使用してソーシャルネットワークでフォローしているユーザーから投稿を取得する方法

Patricia Arquette
リリース: 2024-10-25 07:52:29
オリジナル
564 人が閲覧しました

How to Retrieve Posts from Users You Follow in a Social Network using Laravel Join Operations?

ソーシャルネットワーク機能のための 3 つのテーブルとの Laravel 結合

Laravel では、複数のテーブルを操作する場合、結合の実行方法を理解することが重要です効率的な運用を実現します。このシナリオでは、特定のユーザーがフォローしているユーザーから投稿を取得することを目的としています。

データベース テーブル

関係するテーブルは 3 つあります:

  • ユーザー: id
  • フォロワー: user_id、follower_id
  • 共有: user_id

データベース クエリを使用したクエリ

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート