ldc-legaulois/database/seeders/Development/ProductSeeder.php
2026-09-25 16:25:31 +02:00

104 lines
4 KiB
PHP

<?php
namespace Database\Seeders\Development;
use App\Models\Meat;
use App\Models\Product;
use App\Models\Range;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class ProductSeeder extends Seeder
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = Product::class;
/**
* Run the database seeds.
*/
public function run(): void
{
Product::factory(25)->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<int, \App\Models\Subrange> $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<int, \App\Models\Submeat> $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();
}
});
}
}