Rumah  >  Artikel  >  rangka kerja php  >  pengisihan pertanyaan berbilang jadual laravel

pengisihan pertanyaan berbilang jadual laravel

王林
王林asal
2023-05-20 15:19:381326semak imbas

Dengan perkembangan teknologi Internet, keperluan aplikasi Web menjadi semakin kompleks, melibatkan pertanyaan berkaitan dan pengisihan berbilang jadual data. Sebagai rangka kerja sumber terbuka PHP yang cekap dan fleksibel, Laravel menyediakan banyak kaedah mudah untuk mengurus dan menanyakan berbilang jadual data. Artikel ini akan memperkenalkan cara menggunakan Laravel untuk pertanyaan dan pengisihan berbilang jadual.

  1. Pertanyaan berbilang jadual

Dalam Laravel, anda boleh melaksanakan pertanyaan berbilang jadual dengan mudah menggunakan Eloquent ORM. Eloquent ialah ORM berkuasa yang memetakan jadual pangkalan data ke objek PHP dan menyediakan pelbagai kaedah pertanyaan.

Sebagai contoh, katakan kita mempunyai dua jadual: pengguna (pengguna) dan siaran (artikel) terdapat kunci asing user_id dalam jadual artikel yang menyimpan id pengguna yang menerbitkan artikel. Kami boleh menanyakan semua artikel yang diterbitkan oleh pengguna dengan cara berikut:

$user = User::find(1);
$posts = $user->posts;

Di sini kami mula-mula mendapatkan objek pengguna yang sepadan dengan ID melalui kaedah cari model Pengguna, dan kemudian dapatkan pengguna dengan mengakses $ atribut pengguna->siaran Semua artikel diterbitkan. Kaedah ini sebenarnya adalah hubungan dalam Eloquent Kaedah yang dipanggil jawatan ditakrifkan dalam model Pengguna, yang mentakrifkan hubungan antara model Pengguna dan model Pos.

Anda juga boleh menggunakan kaedah dengan untuk pramuat untuk mengelak daripada melaksanakan berbilang pertanyaan semasa merentasi pengguna dan meningkatkan kecekapan pertanyaan:

$users = User::with('posts')->get();
foreach ($users as $user) {
    $posts = $user->posts;
}

Di sini, kaedah dengan digunakan untuk pramuat semua artikel semua pengguna, dan kemudian Mengakses harta $user->posts dalam gelung mengelak daripada melaksanakan berbilang pertanyaan dalam gelung.

Selain perhubungan model yang disediakan oleh Eloquent, anda juga boleh menggunakan kaedah gabungan untuk melaksanakan pertanyaan berbilang jadual yang kompleks. Sebagai contoh, kod berikut akan menanyakan bilangan pengarang dan ulasan yang sepadan dengan setiap artikel:

$posts = DB::table('posts')
            ->join('users', 'posts.user_id', '=', 'users.id')
            ->leftJoin('comments', 'posts.id', '=', 'comments.post_id')
            ->select('posts.*', 'users.name', DB::raw('count(comments.id) as comments_count'))
            ->groupBy('posts.id')
            ->get();

Kaedah join dan leftJoin digunakan untuk menyambung tiga jadual, dan kemudian kaedah pilih digunakan untuk memilih medan untuk disoal, menggunakan kaedah DB ::raw untuk menjana bahagian count(comments.id) daripada pernyataan pertanyaan asal. Akhir sekali, gunakan kaedah groupBy untuk mengumpulkan artikel.

  1. Isih berbilang jadual

Berdasarkan pertanyaan berbilang jadual, kami mungkin perlu mengisih hasil pertanyaan. Laravel menyediakan pelbagai kaedah pengisihan untuk memenuhi keperluan yang berbeza.

2.1 Isih jadual tunggal

Untuk pengisihan jadual tunggal, Laravel menyediakan kaedah orderBy, yang boleh diisih mengikut medan yang ditentukan, contohnya:

$users = User::orderBy('name', 'desc')->get();

Di sini, semua diisih mengikut tertib menurun mengikut nama pengguna medan.

2.2 Pengisihan jadual persatuan

Untuk pengisihan jadual persatuan, orderBy boleh ditakrifkan dalam kaedah persatuan, contohnya:

class User extends Model
{
    public function posts()
    {
        return $this->hasMany(Post::class)->orderBy('created_at', 'desc');
    }
}

Di sini orderBy ditakrifkan dalam kaedah catatan bagi Model pengguna, Setiap kali $user->posts dipanggil, siaran diisih mengikut tertib menurun mengikut medan create_at.

2.3 Pengisihan berbilang jadual

Untuk pengisihan berbilang jadual, kita boleh menggunakan kaedah join dan orderBy, contohnya:

$posts = DB::table('posts')
            ->join('users', 'posts.user_id', '=', 'users.id')
            ->orderBy('users.name', 'desc')
            ->orderBy('posts.created_at', 'desc')
            ->get();

Di sini, isi mengikut medan nama pengguna dalam tertib menurun, dan kemudian mengikut artikel Isih medan create_at dalam tertib menurun.

  1. Ringkasan

Laravel menyediakan pelbagai kaedah mudah untuk membuat pertanyaan dan mengisih berbilang jadual data, termasuk perhubungan model Eloquent, kaedah gabungan, kaedah orderBy, dsb. Dalam pembangunan sebenar, memilih kaedah yang berbeza untuk membuat pertanyaan dan menyusun mengikut keperluan khusus boleh meningkatkan kecekapan pertanyaan dan kesederhanaan kod.

Atas ialah kandungan terperinci pengisihan pertanyaan berbilang jadual laravel. 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