Загрузка данных
<?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. СОЗДАНИЕ РОЛЕЙ через фабрику ==========
$userRole = Role::factory()->create(['name' => 'user']);
$adminRole = Role::factory()->create(['name' => 'admin']);
// ========== 2. СОЗДАНИЕ УСЛУГ через фабрику ==========
Service::factory(10)->create();
// ========== 3. СОЗДАНИЕ ЗАПЧАСТЕЙ через фабрику ==========
Part::factory(15)->create();
// ========== 4. СОЗДАНИЕ ПОЛЬЗОВАТЕЛЕЙ через фабрику ==========
// Создаём 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. СОЗДАНИЕ ЗАКАЗ-НАРЯДОВ через фабрику ==========
$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();
// Создаём 50 заказ-нарядов
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;
// Назначаем случайного администратора (50% вероятность)
$repairOrder->admin_id = (rand(0, 1) == 1) ? $admins->random()->id : null;
$repairOrder->save();
// Добавляем от 1 до 4 услуг в заказ
$selectedServices = $services->random(rand(1, 4));
$laborCost = 0;
foreach ($selectedServices as $service) {
$quantity = rand(1, 2);
$priceAtTime = $service->price;
$repairOrder->services()->attach($service->id, [
'quantity' => $quantity,
'price_at_time' => $priceAtTime,
]);
$laborCost += $quantity * $priceAtTime;
}
// Добавляем от 0 до 5 запчастей в заказ
$selectedParts = $parts->random(rand(0, 5));
$partsCost = 0;
foreach ($selectedParts as $part) {
$quantity = rand(1, 3);
$priceAtTime = $part->price;
$repairOrder->parts()->attach($part->id, [
'quantity' => $quantity,
'price_at_time' => $priceAtTime,
]);
$partsCost += $quantity * $priceAtTime;
}
// Обновляем итоговые суммы
$repairOrder->update([
'total_labor_cost' => $laborCost,
'total_parts_cost' => $partsCost,
'total_amount' => $laborCost + $partsCost,
]);
});
$this->command->info('База данных успешно заполнена!');
$this->command->info('Создано ролей: ' . Role::count());
$this->command->info('Создано услуг: ' . Service::count());
$this->command->info('Создано запчастей: ' . Part::count());
$this->command->info('Создано пользователей: ' . User::count());
$this->command->info('Создано автомобилей: ' . Car::count());
$this->command->info('Создано заказ-нарядов: ' . RepairOrder::count());
}
}