Загрузка данных
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\Role;
use App\Models\User;
use App\Models\Car;
use App\Models\Service;
use App\Models\Part;
use App\Models\RepairOrder;
class DatabaseSeeder extends Seeder
{
public function run(): void
{
// 1. Роли
if (Role::count() === 0) {
Role::factory()->create(['name' => 'user']);
Role::factory()->create(['name' => 'admin']);
}
$userRole = Role::where('name', 'user')->first();
$adminRole = Role::where('name', 'admin')->first();
// 2. Услуги
if (Service::count() === 0) {
Service::factory(10)->create();
}
// 3. Запчасти
if (Part::count() === 0) {
Part::factory(15)->create();
}
// 4. Пользователи с автомобилями
if (User::count() === 0) {
// 20 обычных пользователей
User::factory(20)
->has(Car::factory(rand(1, 3)), 'cars')
->create(['role_id' => $userRole->id]);
// 2 администратора
User::factory(2)->create(['role_id' => $adminRole->id]);
}
// 5. Заказ-наряды
if (RepairOrder::count() === 0) {
$users = User::where('role_id', $userRole->id)->get();
$cars = Car::all();
$services = Service::all();
$parts = Part::all();
$admins = User::where('role_id', $adminRole->id)->get();
RepairOrder::factory(50)
->make()
->each(function ($repairOrder) use ($users, $cars, $admins, $services, $parts) {
$repairOrder->user_id = $users->random()->id;
$userCars = Car::where('user_id', $repairOrder->user_id)->get();
$repairOrder->car_id = $userCars->isNotEmpty() ? $userCars->random()->id : $cars->random()->id;
$repairOrder->admin_id = (rand(0, 1) == 1) ? $admins->random()->id : null;
$repairOrder->save();
// Добавляем услуги
$selectedServices = $services->random(rand(1, 4));
$laborCost = 0;
foreach ($selectedServices as $service) {
$quantity = rand(1, 2);
$repairOrder->services()->attach($service->id, [
'quantity' => $quantity,
'price_at_time' => $service->price,
]);
$laborCost += $quantity * $service->price;
}
// Добавляем запчасти
$selectedParts = $parts->random(rand(0, 5));
$partsCost = 0;
foreach ($selectedParts as $part) {
$quantity = rand(1, 3);
$repairOrder->parts()->attach($part->id, [
'quantity' => $quantity,
'price_at_time' => $part->price,
]);
$partsCost += $quantity * $part->price;
}
$repairOrder->update([
'total_labor_cost' => $laborCost,
'total_parts_cost' => $partsCost,
'total_amount' => $laborCost + $partsCost,
]);
});
}
$this->command->info('✅ База данных заполнена!');
}
}