laravelのtoQuery()
メソッド:大規模なデータセットを効率的に処理
柔軟な操作と処理データが重要です。コレクションは強力なアレイ操作方法を提供しますが、効率のためにクエリビルダー操作に戻る必要がある場合があります。 Laravelのメソッドは、セットをクエリビルダーに変換してこのギャップを橋渡しし、フィルタリングされたデータセットでデータベースレベルの操作を可能にします。 toQuery()
toQuery()
メソッドは、雄弁コレクションをクエリビルダーインスタンスに戻し、強力なオペレーショナルチェーンコールを許可します。
toQuery()
// 基本转换 $users = User::where('status', 'active')->get(); $userQuery = $users->toQuery();
効率的なバッチ操作を備えた注文処理システムを構築しましょう:
この実装は、
を示しています<?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']); } }
バッチ更新
コレクション変換後の接続操作以上がtoquery()を使用してコレクションをlaravelのクエリに変換するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。