From ec75dfed5d58415604a14e77078222c46e143806 Mon Sep 17 00:00:00 2001 From: "m.zargarov" Date: Wed, 17 Apr 2024 10:11:31 +0400 Subject: [PATCH] Added Subjects --- app/Http/Controllers/GradeController.php | 16 ++-- app/Http/Controllers/SubjectController.php | 80 +++++++++++++++++++ app/Http/Requests/SubjectPostRequest.php | 28 +++++++ app/Models/Grade.php | 8 +- app/Models/Subject.php | 31 +++++++ ...024_04_16_100359_create_subjects_table.php | 28 +++++++ ...4_16_105545_create_grade_subject_table.php | 28 +++++++ resources/views/includes/footer.blade.php | 2 +- resources/views/includes/header.blade.php | 2 +- resources/views/subjects/create.blade.php | 5 ++ resources/views/subjects/edit.blade.php | 5 ++ resources/views/subjects/form.blade.php | 19 +++++ resources/views/subjects/index.blade.php | 65 +++++++++++++++ resources/views/subjects/show.blade.php | 19 +++++ routes/web.php | 2 + 15 files changed, 328 insertions(+), 10 deletions(-) create mode 100644 app/Http/Controllers/SubjectController.php create mode 100644 app/Http/Requests/SubjectPostRequest.php create mode 100644 app/Models/Subject.php create mode 100644 database/migrations/2024_04_16_100359_create_subjects_table.php create mode 100644 database/migrations/2024_04_16_105545_create_grade_subject_table.php create mode 100644 resources/views/subjects/create.blade.php create mode 100644 resources/views/subjects/edit.blade.php create mode 100644 resources/views/subjects/form.blade.php create mode 100644 resources/views/subjects/index.blade.php create mode 100644 resources/views/subjects/show.blade.php diff --git a/app/Http/Controllers/GradeController.php b/app/Http/Controllers/GradeController.php index e89510f..73623a7 100644 --- a/app/Http/Controllers/GradeController.php +++ b/app/Http/Controllers/GradeController.php @@ -4,14 +4,16 @@ namespace App\Http\Controllers; use App\Http\Requests\GradePostRequest; use App\Models\Grade; +use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; +use Illuminate\View\View; class GradeController extends Controller { /** * Display a listing of the resource. */ - public function index() + public function index(): View { return view('grades.index', [ 'grades' => Grade::filter()->paginate(10)->withQueryString(), @@ -21,7 +23,7 @@ class GradeController extends Controller /** * Show the form for creating a new resource. */ - public function create() + public function create(): View { return view('grades.create'); } @@ -29,7 +31,7 @@ class GradeController extends Controller /** * Store a newly created resource in storage. */ - public function store(GradePostRequest $request) + public function store(GradePostRequest $request): RedirectResponse { $grade = Grade::create($request->validated()); @@ -39,7 +41,7 @@ class GradeController extends Controller /** * Display the specified resource. */ - public function show(Grade $grade) + public function show(Grade $grade): View { return view('grades.show', [ 'grade' => $grade, @@ -49,7 +51,7 @@ class GradeController extends Controller /** * Show the form for editing the specified resource. */ - public function edit(Grade $grade) + public function edit(Grade $grade): View { return view('grades.edit', [ 'grade' => $grade, @@ -59,7 +61,7 @@ class GradeController extends Controller /** * Update the specified resource in storage. */ - public function update(GradePostRequest $request, Grade $grade) + public function update(GradePostRequest $request, Grade $grade): RedirectResponse { $grade->update($request->validated()); @@ -69,7 +71,7 @@ class GradeController extends Controller /** * Remove the specified resource from storage. */ - public function destroy(Grade $grade) + public function destroy(Grade $grade): RedirectResponse { $grade->delete(); diff --git a/app/Http/Controllers/SubjectController.php b/app/Http/Controllers/SubjectController.php new file mode 100644 index 0000000..aff017c --- /dev/null +++ b/app/Http/Controllers/SubjectController.php @@ -0,0 +1,80 @@ + Subject::filter()->paginate(10)->withQueryString(), + ]); + } + + /** + * Show the form for creating a new resource. + */ + public function create(): View + { + return view('subjects.create'); + } + + /** + * Store a newly created resource in storage. + */ + public function store(SubjectPostRequest $request): RedirectResponse + { + $subject = Subject::create($request->validated()); + + return redirect()->route('subjects.show', $subject); + } + + /** + * Display the specified resource. + */ + public function show(Subject $subject): View + { + return view('subjects.show', [ + "subject" => $subject + ]); + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(Subject $subject): View + { + return view('subjects.edit', [ + 'subject' => $subject, + ]); + } + + /** + * Update the specified resource in storage. + */ + public function update(SubjectPostRequest $request, Subject $subject): RedirectResponse + { + $subject->update($request->validated()); + + return redirect()->route('subjects.show', $subject); + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(Subject $subject): RedirectResponse + { + $subject->delete(); + + return redirect()->route('subjects.index'); + } +} diff --git a/app/Http/Requests/SubjectPostRequest.php b/app/Http/Requests/SubjectPostRequest.php new file mode 100644 index 0000000..6a97968 --- /dev/null +++ b/app/Http/Requests/SubjectPostRequest.php @@ -0,0 +1,28 @@ +|string> + */ + public function rules(): array + { + return [ + 'name' => 'required|unique:grades|max:255', + ]; + } +} diff --git a/app/Models/Grade.php b/app/Models/Grade.php index fcd5315..d5fbe16 100644 --- a/app/Models/Grade.php +++ b/app/Models/Grade.php @@ -5,6 +5,7 @@ namespace App\Models; use Illuminate\Contracts\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsToMany; class Grade extends Model { @@ -14,7 +15,12 @@ class Grade extends Model 'name', ]; - public function scopeFilter(Builder $query) + public function subjects(): BelongsToMany + { + return $this->belongsToMany(Subject::class); + } + + public function scopeFilter(Builder $query): void { $name = request('name'); diff --git a/app/Models/Subject.php b/app/Models/Subject.php new file mode 100644 index 0000000..5126923 --- /dev/null +++ b/app/Models/Subject.php @@ -0,0 +1,31 @@ +belongsToMany(Grade::class); + } + + public function scopeFilter(Builder $query): void + { + $name = request('name'); + + $query->when($name, function (Builder $query, $name) { + $query->whereRaw('name ilike ?', ["$name%"]); + }); + } +} diff --git a/database/migrations/2024_04_16_100359_create_subjects_table.php b/database/migrations/2024_04_16_100359_create_subjects_table.php new file mode 100644 index 0000000..d647667 --- /dev/null +++ b/database/migrations/2024_04_16_100359_create_subjects_table.php @@ -0,0 +1,28 @@ +id(); + $table->string('name'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('subjects'); + } +}; diff --git a/database/migrations/2024_04_16_105545_create_grade_subject_table.php b/database/migrations/2024_04_16_105545_create_grade_subject_table.php new file mode 100644 index 0000000..c531659 --- /dev/null +++ b/database/migrations/2024_04_16_105545_create_grade_subject_table.php @@ -0,0 +1,28 @@ +foreignId('grade_id')->constrained('grades')->onDelete('cascade'); + $table->foreignId('subject_id')->constrained('subjects')->onDelete('cascade'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('grade_subject'); + } +}; diff --git a/resources/views/includes/footer.blade.php b/resources/views/includes/footer.blade.php index d731ab0..0c5547d 100644 --- a/resources/views/includes/footer.blade.php +++ b/resources/views/includes/footer.blade.php @@ -2,7 +2,7 @@