Bagaimana untuk Menyertai Tiga Jadual dengan Cekap dalam Laravel untuk Mendapatkan Siaran daripada Pengguna yang Diikuti?

Linda Hamilton
Lepaskan: 2024-10-25 07:09:29
asal
954 orang telah melayarinya

How to Efficiently Join Three Tables in Laravel to Retrieve Posts from Followed Users?

Laravel: Menyertai Tiga Jadual untuk Mendapatkan Data

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.

Menggunakan Pembina Pertanyaan Pangkalan Data

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

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

Menggunakan Model untuk Kefungsian Dipertingkat

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

Pelaksanaan Pertanyaan Menggunakan Model

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

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!