Rumah >pembangunan bahagian belakang >tutorial php >Menukar Koleksi ke Pertanyaan di Laravel menggunakan Toquery ()

Menukar Koleksi ke Pertanyaan di Laravel menggunakan Toquery ()

James Robert Taylor
James Robert Taylorasal
2025-03-07 00:46:08734semak imbas

Converting Collections to Queries in Laravel Using toQuery()

kaedah Laravel: Proses Dataset Besar

dengan cekap toQuery()

manipulasi fleksibel dan data pemprosesan adalah penting apabila memproses dataset besar di Laravel. Walaupun koleksi menyediakan kaedah manipulasi array yang kuat, kadang -kadang untuk kecekapan kita perlu beralih ke operasi pembina pertanyaan. Kaedah

Laravel menjembatani jurang ini dengan menukar set kembali ke pembina pertanyaan, membolehkan operasi peringkat pangkalan data pada dataset yang ditapis. toQuery()

Penggunaan

toQuery() Kaedah

menukarkan koleksi fasih kembali ke contoh pembina pertanyaan, yang membolehkan panggilan rantaian operasi yang kuat: toQuery()

// 基本转换
$users = User::where('status', 'active')->get();

$userQuery = $users->toQuery();
Aplikasi Praktikal

mari kita membina sistem pemprosesan pesanan dengan operasi batch yang cekap:

<?php namespace App\Services;

use App\Models\Order;
use App\Events\OrdersProcessed;
use Illuminate\Support\Facades\DB;

class OrderProcessor
{
    public function processReadyOrders()
    {
        $orders = Order::where('status', 'ready')
            ->where('scheduled_date', now())
            ->get();

        DB::transaction(function() use ($orders) {
            // 将集合转换为查询以进行批量更新
            $orders->toQuery()->update([
                'status' => 'processing',
                'processed_at' => now()
            ]);
            // 链式调用其他操作
            $ordersByRegion = $orders->toQuery()
                ->join('warehouses', 'orders.warehouse_id', '=', 'warehouses.id')
                ->select('warehouses.region', DB::raw('count(*) as count'))
                ->groupBy('region')
                ->get();

            event(new OrdersProcessed($ordersByRegion));
        });
    }

    public function updatePriorities()
    {
        $urgentOrders = Order::where('priority', 'high')->get();

        $urgentOrders->toQuery()
            ->select('orders.*', 'customers.tier')
            ->join('customers', 'orders.customer_id', '=', 'customers.id')
            ->where('customers.tier', 'vip')
            ->update(['priority' => 'critical']);
    }
}
Pelaksanaan ini menunjukkan:

    kemas kini batch menggunakan urus niaga yang dijamin
  • operasi sambungan selepas penukaran koleksi
  • Agregasi dan kumpulan
Dengan memanfaatkan

, anda boleh beralih dengan lancar antara pengumpulan dan operasi pembina pertanyaan, menjadikan aplikasi Laravel anda lebih cekap dan menjadikan interaksi pangkalan data anda lebih fleksibel. toQuery()

Atas ialah kandungan terperinci Menukar Koleksi ke Pertanyaan di Laravel menggunakan Toquery (). 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