Rumah > Artikel > pangkalan data > Bagaimana untuk melaksanakan fungsi carian dalam Laravel yang mengutamakan perkaitan apabila mencari merentas berbilang lajur dengan berbilang kata kunci?
Laravel: Carian Menggunakan Berbilang Kata Kunci Merentas Berbilang Lajur dengan Keputusan Tertib Berkaitan
Dalam Laravel, melaksanakan fungsi carian yang mencari data berdasarkan berbilang kata kunci dalam berbilang lajur boleh mencabar, terutamanya apabila tertib perkaitan terlibat. Panduan komprehensif ini menangani masalah ini secara terperinci, menyediakan penyelesaian yang mengikut pendekatan berstruktur.
Struktur Pangkalan Data
Jadual pangkalan data melibatkan dua lajur: meta_name dan meta_description, di mana kata kunci carian akan dipadankan.
Kriteria Carian
Carian mempunyai kriteria khusus, mengutamakan hasil berdasarkan kehadiran kata kunci dalam kedua-dua lajur. Baris yang mengandungi ketiga-tiga kata kunci mendapat keutamaan tertinggi, diikuti dengan baris dengan hanya dua kata kunci pertama dan terakhir, baris dengan hanya kata kunci pertama.
Penomboran
The hasil carian akan dimuatkan secara dinamik menggunakan penomboran, dengan hasil baharu akan dilampirkan apabila pengguna menatal ke bahagian bawah halaman.
Kod Sumber
Coretan kod berikut mendapatkan semula hasil carian dalam susunan yang dikehendaki:
<code class="php">$word1 = 'word1'; $word2 = 'word2'; $word3 = 'word3'; $all = DB::table('posts') ->where('meta_name', 'like', "%{$word1}%") ->where('meta_name', 'like', "%{$word2}%") ->where('meta_name', 'like', "%{$word3}%") ->orWhere(function($query) use ($word1, $word2, $word3) { $query->where('meta_description', 'like', "%{$word1}%") ->where('meta_description', 'like', "%{$word2}%") ->where('meta_description', 'like', "%{$word3}%"); }); $twoWords = DB::table('posts') ->where('meta_name', 'like', "%{$word1}%") ->where('meta_name', 'like', "%{$word2}%") ->orWhere(function($query) use ($word1, $word2) { $query->where('meta_description', 'like', "%{$word1}%") ->where('meta_description', 'like', "%{$word2}%"); }) ->whereNotIn('id', $all->pluck('id')); $oneWord = DB::table('posts') ->where('meta_name', 'like', "%{$word1}%") ->orWhere('meta_description', 'like', "%{$word1}%") ->whereNotIn('id', $all->pluck('id')) ->whereNotIn('id', $twoWords->pluck('id'));</code>
Pertanyaan Akhir
Untuk menggabungkan hasil, kami menggunakan kaedah unionAll:
<code class="php">$posts = $all->unionAll($twoWords)->unionAll($oneWord)->get(); // check this first # or $posts = $all->unionAll($twoWords)->unionAll($oneWord)->skip($start)->take($this->rowperpage)->get();</code>
Kod ini mengambil keputusan dalam susunan yang ditentukan, mengutamakan perkaitan. Kaedah skip() dan take() digunakan untuk penomboran, di mana $start mewakili bilangan hasil yang telah dipaparkan. Akhir sekali, kaedah get() mendapatkan semula rekod.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan fungsi carian dalam Laravel yang mengutamakan perkaitan apabila mencari merentas berbilang lajur dengan berbilang kata kunci?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!