"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Convertendo coleções em consultas em Laravel usando toQuery ()

Convertendo coleções em consultas em Laravel usando toQuery ()

Postado em 2025-03-07
Navegar:520

Converting Collections to Queries in Laravel Using toQuery()

Laravel's TOQUERY () Método: lidar com eficiência de grandes conjuntos de dados

Ao processar grandes conjuntos de dados no Laravel, é crucial operar e processar dados de maneira flexível. Embora as coleções forneçam poderosos métodos de manipulação de matriz, às vezes, para a eficiência, precisamos voltar às operações do Construtor de Consultas. O método de Laravel's toQuery () preenche essa lacuna convertendo o conjunto de volta ao construtor de consultas, permitindo operações de nível de banco de dados no conjunto de dados filtrados.

use TOQUERY ()

] O método

toQuery () converte a coleção Eloquente de volta em uma instância do construtor de consultas, permitindo chamadas de cadeia operacional poderosas:

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

$userQuery = $users->toQuery();

APLICAÇÃO PRÁTICA

Vamos construir um sistema de processamento de pedidos com operações eficientes em lote:

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']);
    }
}

Esta implementação demonstra:

  • atualizações em lote usando transação garantida
  • operação de conexão após a conversão de coleta
  • agregação e agrupamento

Aproveitando toQuery () , você pode alternar perfeitamente entre operações de coleção e construtor de consultas, tornando seus aplicativos Laravel mais eficientes e tornando sua interação do banco de dados mais flexível.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3