Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah saya boleh mendapatkan semula kandungan tertentu daripada berbilang jadual dalam Laravel berdasarkan perhubungan yang kompleks, seperti membina suapan seperti Twitter yang menapis siaran berdasarkan pengguna yang diikuti pengguna semasa?

Bagaimanakah saya boleh mendapatkan semula kandungan tertentu daripada berbilang jadual dalam Laravel berdasarkan perhubungan yang kompleks, seperti membina suapan seperti Twitter yang menapis siaran berdasarkan pengguna yang diikuti pengguna semasa?

Patricia Arquette
Patricia Arquetteasal
2024-10-25 07:39:29139semak imbas

How can I retrieve specific content from multiple tables in Laravel based on complex relationships, such as building a Twitter-like feed that filters posts based on users a current user follows?

Laravel Sertai dengan Berbilang Jadual untuk Menapis Kandungan

Dalam artikel ini, kami menangani cabaran biasa yang dihadapi semasa membina platform media sosial menggunakan Laravel : mendapatkan semula kandungan khusus berdasarkan perhubungan kompleks antara berbilang jadual. Kami akan menyediakan penyelesaian yang komprehensif menggunakan kedua-dua pertanyaan SQL mentah dan ORM Laravel Eloquent.

Pernyataan Masalah

Objektifnya adalah untuk membina suapan seperti Twitter yang memaparkan siaran hanya daripada pengguna yang diikuti oleh pengguna semasa. Untuk mencapai matlamat ini, kita perlu menapis jadual "Kongsi" berdasarkan syarat berikut:

  • Share.user_id mestilah sama dengan Followers.follower_id
  • Followers.user_id mestilah sama kepada Users.id

SQL Solution

Walaupun pertanyaan asal SQL yang diberikan mungkin kelihatan betul, pelarasan kecil diperlukan untuk susunan serta syarat untuk bekerja dengan betul. Pertanyaan SQL yang diperbetulkan berikut dengan berkesan bergabung dengan tiga jadual dan menggunakan penapisan yang ditentukan:

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

Sebagai alternatif, menggunakan Eloquent ORM menawarkan pendekatan yang lebih elegan dan terkapsul. Berikut ialah penyelesaian berasaskan model:

User.php (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');
}

Share.php (Model)

public function user() {
    return $this->belongsTo('User');
}

Controller.php (Controller)

$my = User::find('my_id');

$shares = Share::with('user')
    ->join('follows', 'follows.user_id', '=', 'shares.user_id')
    ->where('follows.follower_id', '=', $my->id)
    ->get();

foreach ($shares as $share) {
    echo $share->user->username;
}

Pendekatan ini menyediakan penyelesaian yang lebih fleksibel dan boleh diselenggara, memastikan integriti data dan pertanyaan yang cekap.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mendapatkan semula kandungan tertentu daripada berbilang jadual dalam Laravel berdasarkan perhubungan yang kompleks, seperti membina suapan seperti Twitter yang menapis siaran berdasarkan pengguna yang diikuti pengguna semasa?. 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