Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyertai Tiga Jadual dalam Laravel untuk Suapan seperti Twitter?

Bagaimana untuk Menyertai Tiga Jadual dalam Laravel untuk Suapan seperti Twitter?

DDD
DDDasal
2024-10-27 00:00:05898semak imbas

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

Laravel Sertai dengan 3 Jadual

Untuk menyertai tiga jadual dalam Laravel untuk suapan seperti Twitter, pertanyaan gabungan boleh dibina seperti berikut :

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

Pertanyaan ini menyertai jadual perkongsian, pengguna dan pengikut berdasarkan syarat yang dinyatakan dalam klausa gabungan.

Pendekatan lain ialah menggunakan model dan bukannya pertanyaan mentah untuk lebih pendekatan berorientasikan objek. Berikut ialah contoh menggunakan model:

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

Dengan menggunakan pendekatan model ini, anda boleh mendapatkan semula semua perkongsian daripada pengguna yang diikuti oleh pengguna log masuk, dengan bersemangat memuatkan pengguna yang mencipta bahagian itu.

Atas ialah kandungan terperinci Bagaimana untuk Menyertai Tiga Jadual dalam Laravel untuk Suapan seperti Twitter?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn