Rumah > Artikel > rangka kerja php > pengisihan pertanyaan berbilang jadual laravel
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.
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.
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.
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!