Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyertai Tiga Jadual dengan Cekap dalam Laravel untuk Mendapatkan Siaran daripada Pengguna yang Diikuti?
Dalam senario ini, anda sedang membina aplikasi seperti Twitter di mana anda perlu memaparkan siaran daripada pengguna yang sedang pengguna mengikuti. Memandangkan anda mempunyai tiga jadual, iaitu Pengguna, Pengikut dan Perkongsian, memahami cara menyertainya dengan berkesan adalah penting untuk mendapatkan semula data yang diingini.
Matlamatnya adalah untuk mendapatkan semua Perkongsian di mana user_id daripada jadual Perkongsian sepadan dengan follower_id daripada jadual Pengikut dan user_id daripada jadual Pengikut sepadan dengan id daripada jadual Pengguna.
Anda cuba menggunakan pertanyaan berikut:
<code class="php">$shares = DB::table('shares') ->leftjoin('followers', 'shares.user_id', '=', 'followers.follower_id') ->leftjoin('users', 'followers.user_id', '=', 'users.id') ->where('users.id', 3) ->where('shares.user_id', 'followers.follower_id') ->get();</code>
Walau bagaimanapun, isu dengan pertanyaan ini adalah dalam syarat penyertaan untuk perkongsian dan pengikut. Cantuman yang betul hendaklah:
<code class="php">->leftjoin('followers', 'shares.user_id', '=', 'followers.user_id')</code>
Daripada menggunakan pembina pertanyaan pangkalan data, disarankan untuk menggunakan model Laravel untuk pendekatan yang lebih berstruktur dan cekap terhadap operasi pangkalan data .
Begini cara model boleh ditakrifkan:
<code class="php">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'); } } class Share extends Model { public function user() { return $this->belongsTo('User'); } }</code>
Setelah model ditakrifkan, anda boleh melaksanakan pertanyaan seperti ini:
<code class="php">$my = User::find('my_id'); // Retrieves all shares by users that I follow // eager loading the "owner" of the share $shares = Share::with('user') ->join('follows', 'follows.user_id', '=', 'shares.user_id') ->where('follows.follower_id', '=', $my->id) ->get('shares.*'); // Notice the shares.* here // prints the username of the person who shared something foreach ($shares as $share) { echo $share->user->username; }</code>
Dalam contoh ini, pertanyaan mendapatkan semula semua Perkongsian di mana user_id daripada jadual Kongsi sepadan dengan follower_id daripada jadual Pengikut dan user_id daripada jadual Pengikut sepadan dengan id pengguna semasa yang disimpan dalam pembolehubah $my.
Atas ialah kandungan terperinci Bagaimana untuk Menyertai Tiga Jadual dengan Cekap dalam Laravel untuk Mendapatkan Siaran daripada Pengguna yang Diikuti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!