104 lines
4 KiB
PHP
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();
|
|
}
|
|
});
|
|
}
|
|
}
|