Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menggunakan `whereIn` Laravel dengan Subquery?

Bagaimana untuk Menggunakan `whereIn` Laravel dengan Subquery?

Susan Sarandon
Susan Sarandonasal
2024-12-25 13:32:55520semak imbas

How to Use Laravel's `whereIn` with a Subquery?

Subkueri Laravel dengan Klausa WHERE IN

Tugas biasa dalam Laravel ialah untuk mendapatkan semula data menggunakan subkueri dalam klausa WHERE IN. Untuk mencapai ini, anda boleh menggunakan kaedah whereIn() dengan penutupan.

Sebagai contoh, katakan anda mempunyai pertanyaan berikut:

SELECT 
    `p`.`id`,
    `p`.`name`, 
    `p`.`img`, 
    `p`.`safe_name`, 
    `p`.`sku`, 
    `p`.`productstatusid` 
FROM `products` p 
WHERE `p`.`id` IN (
    SELECT 
        `product_id` 
    FROM `product_category`
    WHERE `category_id` IN ('223', '15')
)
AND `p`.`active`=1

Untuk menterjemah pertanyaan ini ke dalam Laravel, anda boleh menggunakan kod berikut:

Products::whereIn('id', function($query){
    $query->select('paper_type_id')
    ->from(with(new ProductCategory)->getTable())
    ->whereIn('category_id', ['223', '15'])
    ->where('active', 1);
})
->get();

Dalam ini kod:

  • Produk::whereIn('id', ...) memulakan subquery dalam klausa WHERE IN.
  • Fungsi penutupan mentakrifkan subquery.
  • $query->select('paper_type_id') memilih lajur untuk dikembalikan daripada subquery.
  • $query->from(with(new ProductCategory)->getTable()) menentukan jadual untuk digunakan dalam subquery.
  • $query->whereIn( 'category_id', ['223', '15']) menambah syarat pada subquery.
  • $query->where('active', 1) menambah syarat lain pada subquery.
  • ->get() mendapatkan semula hasilnya.

Atas ialah kandungan terperinci Bagaimana untuk Menggunakan `whereIn` Laravel dengan Subquery?. 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