<?php namespace Database\Seeders; use App\Enums\ScoreEnum; use App\Models\Grade; use App\Models\Lesson; use App\Models\Student; use App\Models\Subject; use App\Models\Teacher; use App\Models\User; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Seed the application's database. */ public function run(): void { $teachers = Teacher::factory(15)->create(); $grades = Grade::factory(10)->create(); $subjects = Subject::factory(10)->create(); $scores = ScoreEnum::cases(); $teachers->each(function ($teacher) { $user = User::factory()->create(); $teacher->user()->save($user); }); $grades->each(function ($grade) use ($subjects, $teachers, $scores){ $grade->subjects()->sync($subjects); $grade->teachers()->sync($teachers); $students = Student::factory(10)->create([ 'grade_id' => $grade->id, ])->each(function ($student) use ($scores) { $user = User::factory()->create(); $student->user()->save($user); }); $lessons = Lesson::factory(30)->create([ 'grade_id' => $grade->id, 'subject_id' => $grade->subjects->random()->id, 'teacher_id' => $grade->teachers->random()->id, ]); $students->each(function ($student) use ($lessons, $scores) { $lessons->each(function ($lesson) use ($student, $scores) { $student->lessons() ->syncWithoutDetaching([$lesson->id => ['score' => $scores[array_rand($scores)]]]); }); }); }); $subjects->each(function ($subject) use ($teachers) { $subject->teachers()->sync($teachers->random(2)); }); } }