ldc-legaulois/database/seeders/Development/ProductSeeder.php

106 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.
*
* @return void
*/
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();
}
});
}
}