create()->map(function (Product $productModel) { // Morph relationships (Range/Subrange). $rangeModel = Range::inRandomOrder()->first(); DB::table('productables')->insert( [ 'product_id' => $productModel->getKey(), 'productable_id' => $rangeModel->getKey(), 'productable_type' => 'App\Models\Range', ] ); if (\fake()->boolean(75)) { /** @var \Illuminate\Database\Eloquent\Collection $subrangeModels */ $subrangeModels = $rangeModel->subranges; DB::table('productables')->insert( [ 'product_id' => $productModel->getKey(), 'productable_id' => $subrangeModels->random()->getKey(), 'productable_type' => 'App\Models\Subrange', ] ); } // Morph relationships (Meat/Submeat). if (\fake()->boolean(75)) { $meatModel = Meat::inRandomOrder()->first(); DB::table('productables')->insert( [ 'product_id' => $productModel->getKey(), 'productable_id' => $meatModel->getKey(), 'productable_type' => 'App\Models\Meat', ] ); // @phpstan-ignore-next-line if (\fake()->boolean(75)) { /** @var \Illuminate\Database\Eloquent\Collection $submeatModels */ $submeatModels = $meatModel->submeats; DB::table('productables')->insert( [ 'product_id' => $productModel->getKey(), 'productable_id' => $submeatModels->random()->getKey(), 'productable_type' => 'App\Models\Submeat', ] ); } } // end if // Morph relationships (ProductTypes). if (\fake()->boolean(50)) { /** @var \App\Models\ProductType $productTypeModel */ $productTypeModel = Range::inRandomOrder()->first(); DB::table('productables')->insert( [ 'product_id' => $productModel->getKey(), 'productable_id' => $productTypeModel->getKey(), 'productable_type' => 'App\Models\ProductType', ] ); } else { $productModel->approach_id = Range::inRandomOrder()->first()->getKey(); $productModel->saveQuietly(); } // Morph relationships (Claims). if (\fake()->boolean(50)) { /** @var \App\Models\Claim $claimModel */ $claimModel = Range::inRandomOrder()->first(); DB::table('productables')->insert( [ 'product_id' => $productModel->getKey(), 'productable_id' => $claimModel->getKey(), 'productable_type' => 'App\Models\Claim', ] ); } else { $productModel->approach_id = Range::inRandomOrder()->first()->getKey(); $productModel->saveQuietly(); } }); } }