Le système d'usine de Laravel propose une méthode puissante recycle
pour une création efficace de données. Cette méthode est particulièrement utile lors de la création de structures de données complexes avec des relations interconnectées, en évitant l'instanciation du modèle redondant. La méthode recycle
réutilise les instances de modèle existantes sur plusieurs appels d'usine, augmentant considérablement les performances.
illustrons avec un scénario de commerce électronique pour les tests:
<?php namespace Tests; use App\Models\Store; use App\Models\Product; use App\Models\Category; use App\Models\Order; use Tests\TestCase; class StoreTest extends TestCase { public function test_sales_report_generation() { // Establish foundational data $store = Store::factory()->create(); $categories = Category::factory(3)->recycle($store)->create(); // Populate categories with products $products = Product::factory(20)->recycle($store)->recycle($categories)->create(); // Generate orders referencing existing products $orders = Order::factory(50)->recycle($store)->recycle($products)->create()->each(function ($order) use ($products) { // Assign random products to each order $orderProducts = $products->random(rand(1, 5)); $order->products()->attach( $orderProducts->pluck('id')->mapWithKeys(function ($id) { return [$id => ['quantity' => rand(1, 5)]]; }) ); }); // Validate report generation $report = $store->generateSalesReport(); $this->assertNotNull($report); $this->assertEquals(50, $report->total_orders); } }
Cet exemple montre comment recycle
rationalise la création d'une base de données de test. Au lieu de créer à plusieurs reprises des instances Store
, Category
et Product
, la méthode recycle
les réutilise, entraînant une exécution de test plus rapide et une consommation de ressources réduite. Ceci est particulièrement bénéfique lorsque vous traitez avec de grands ensembles de données ou des relations complexes dans les modèles de votre application.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!