ホームページ >データベース >mysql チュートリアル >Laravel で 3 つのテーブルを結合して Twitter のようなフィードを作成するにはどうすればよいですか?

Laravel で 3 つのテーブルを結合して Twitter のようなフィードを作成するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-27 00:00:05897ブラウズ

How to Join Three Tables in Laravel for a Twitter-like Feed?

3 つのテーブルとの Laravel 結合

Twitter のようなフィード用に Laravel で 3 つのテーブルを結合するには、結合クエリを次のように構築できます。 :

$shares = DB::table('shares')
    ->join('users', 'users.id', '=', 'shares.user_id')
    ->join('followers', 'followers.user_id', '=', 'users.id')
    ->where('followers.follower_id', '=', 3)
    ->get();

このクエリは、join 句で指定された条件に基づいて、shares、users、followers テーブルを結合します。

もう 1 つのアプローチは、生のクエリの代わりにモデルを使用して、より詳細なクエリを実行することです。オブジェクト指向のアプローチ。モデルを使用した例を次に示します。

// Define 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');
    }
    public function followees() {
        return $this->belongsToMany('User', 'follows', 'follower_id', 'user_id');
    }
}

// Define Share Model
class Share extends Model {
    public function user() {
        return $this->belongsTo('User');
    }
}

// Model Usage
$my = User::find('my_id');

$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;
}

このモデル アプローチを使用すると、ログイン ユーザーがフォローしているユーザーからすべての共有を取得し、共有を作成したユーザーを積極的に読み込むことができます。

以上がLaravel で 3 つのテーブルを結合して Twitter のようなフィードを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。