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:
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!