add SlideFactory to Slide model and update DatabaseSeeder to include SlideSeeder for improved data seeding
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace App\Containers\Widget\Data\Factories;
|
||||
|
||||
use App\Containers\Widget\Models\Slide;
|
||||
use App\Ship\Abstracts\Factories\Factory;
|
||||
|
||||
/**
|
||||
* @extends \App\Ship\Abstracts\Factories\Factory<\App\Ship\Models\Model>
|
||||
*/
|
||||
class SlideFactory extends Factory
|
||||
{
|
||||
|
||||
protected $model = Slide::class;
|
||||
/**
|
||||
* Define the model's default state.
|
||||
*
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function definition(): array
|
||||
{
|
||||
return [
|
||||
'title' => $this->faker->sentence(3),
|
||||
'content' => $this->faker->paragraph(2),
|
||||
'image' => json_encode([
|
||||
'url' => '/public/img/thumbnail-1.png',
|
||||
'shading' => $this->faker->randomFloat(1, 0, 1)
|
||||
]),
|
||||
'link' => '/news/' . $this->faker->slug,
|
||||
'settings' => json_encode([
|
||||
'text_position' => $this->faker->randomElement(['center', 'left', 'right']),
|
||||
'link_text' => $this->faker->word,
|
||||
]),
|
||||
'color_theme' => $this->faker->safeColorName,
|
||||
'is_active' => $this->faker->boolean(80), // 80% шанс, что будет true
|
||||
'start_time' => $this->faker->dateTimeBetween('-1 week', '+1 week'),
|
||||
'end_time' => $this->faker->dateTimeBetween('+1 week', '+2 weeks'),
|
||||
'sort' => $this->faker->numberBetween(1, 10),
|
||||
// slider_id будет установлен в сидере
|
||||
'slidable_id' => null,
|
||||
'slidable_type' => null,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace App\Containers\Widget\Data\Seeders;
|
||||
|
||||
use App\Containers\Widget\Models\Slide;
|
||||
use App\Containers\Widget\Models\Slider;
|
||||
use App\Ship\Abstracts\Seeders\Seeder;
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
|
||||
class SlideSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
$slider = Slider::first();
|
||||
|
||||
if (!$slider) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Удаляем старые слайды перед созданием новых
|
||||
Slide::where('slider_id', $slider->id)->delete();
|
||||
|
||||
// Создаем 5 случайных слайдов, используя фабрику
|
||||
Slide::factory()
|
||||
->count(5)
|
||||
->for($slider) // Устанавливаем связь с родительской моделью Slider
|
||||
->create(); }
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Containers\Widget\Models;
|
||||
|
||||
use App\Containers\Widget\Data\Factories\SlideFactory;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
@@ -26,4 +27,9 @@ class Slide extends Model
|
||||
{
|
||||
return $this->morphTo();
|
||||
}
|
||||
|
||||
protected static function newFactory()
|
||||
{
|
||||
return SlideFactory::new();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user