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
Lepaskan: 2024-10-25 07:39:29
asal
216 orang telah melayarinya

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();
Salin selepas log masuk

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');
}
Salin selepas log masuk

Share.php (Model)

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

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;
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan