From 5513c2b37ca757750a45630a6cc7088ee56adbce Mon Sep 17 00:00:00 2001 From: "Christopher C. Wells" Date: Mon, 4 Jan 2021 20:28:40 -0800 Subject: [PATCH] Add food delete form --- app/Http/Controllers/FoodController.php | 22 +++++++++---- app/Models/Food.php | 8 +++++ resources/views/foods/delete.blade.php | 43 +++++++++++++++++++++++++ resources/views/foods/edit.blade.php | 16 ++++----- resources/views/foods/index.blade.php | 17 +++++----- routes/web.php | 3 ++ 6 files changed, 86 insertions(+), 23 deletions(-) create mode 100644 resources/views/foods/delete.blade.php diff --git a/app/Http/Controllers/FoodController.php b/app/Http/Controllers/FoodController.php index 7c914cb..4f93ea6 100644 --- a/app/Http/Controllers/FoodController.php +++ b/app/Http/Controllers/FoodController.php @@ -86,13 +86,23 @@ class FoodController extends Controller } /** - * Remove the specified resource from storage. - * - * @param \App\Models\Food $food - * @return \Illuminate\Http\Response + * Confirm removal of specified resource. */ - public function destroy(Food $food) + public function delete(Food $food): View { - // + return view('foods.delete')->with('food', $food); + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(Food $food): RedirectResponse + { + if ($food->foodAmounts()->count()) { + return back()->withErrors('Cannot delete: this food is used in recipes.'); + } + $food->delete(); + return redirect(route('foods.index')) + ->with('message', "Food {$food->name} deleted!"); } } diff --git a/app/Models/Food.php b/app/Models/Food.php index 65c96b6..ac957f2 100644 --- a/app/Models/Food.php +++ b/app/Models/Food.php @@ -6,6 +6,7 @@ use App\Models\Traits\Journalable; use App\Models\Traits\Sluggable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\HasMany; /** * @mixin IdeHelperFood @@ -52,4 +53,11 @@ class Food extends Model 'serving_weight' => 'float', 'sodium' => 'float', ]; + + /** + * Get the food amounts using this food. + */ + public function foodAmounts(): HasMany { + return $this->hasMany(FoodAmount::class); + } } diff --git a/resources/views/foods/delete.blade.php b/resources/views/foods/delete.blade.php new file mode 100644 index 0000000..5375e0b --- /dev/null +++ b/resources/views/foods/delete.blade.php @@ -0,0 +1,43 @@ + + +

+ Delete {{ $food->name }}? +

+
+ +
+
+ @if ($errors->any()) +
+ @foreach ($errors->all() as $error) +
+ {{ $error }} +
+ @endforeach +
+ @endif +
+
+
+ @method('delete') + @csrf +
+ Are you sure what to delete {{ $food->name }}? +
+
Detail:
+
{{ $food->detail ?? 'None' }}
+
Brand:
+
{{ $food->brand ?? 'None' }}
+
+
+ + Yes, delete + + No, do not delete +
+
+
+
+
+
diff --git a/resources/views/foods/edit.blade.php b/resources/views/foods/edit.blade.php index 6485ced..c395047 100644 --- a/resources/views/foods/edit.blade.php +++ b/resources/views/foods/edit.blade.php @@ -1,7 +1,7 @@

- {{ ($food->exists ? 'Save' : 'Add') }} Food + {{ ($food->exists ? "Edit {$food->name}" : 'Add Food') }}

@@ -25,14 +25,8 @@
- @if ($food->exists) -
- @method('put') - @else - - @endif - - + + @if ($food->exists)@method('put')@endif @csrf
@@ -131,6 +125,10 @@ {{ ($food->exists ? 'Save' : 'Add') }} + @if ($food->exists) + Delete + @endif
diff --git a/resources/views/foods/index.blade.php b/resources/views/foods/index.blade.php index 55243d4..bdb7728 100644 --- a/resources/views/foods/index.blade.php +++ b/resources/views/foods/index.blade.php @@ -16,7 +16,14 @@
@foreach ($foods as $food) -
+
+ + + + + +
{{ $food->name }}@if($food->detail), {{ $food->detail }}@endif
@@ -31,7 +38,7 @@ ({{ $food->serving_weight }}g)
-
Amount per serving
+
Amount per serving
Calories
{{$food->calories}}
Fat
@@ -45,12 +52,6 @@
Protein
{{ $food->protein < 1 ? $food->protein * 1000 . "m" : $food->protein }}g
-
@endforeach
diff --git a/routes/web.php b/routes/web.php index d678668..8496999 100644 --- a/routes/web.php +++ b/routes/web.php @@ -25,6 +25,9 @@ Route::get('/dashboard', function () { })->middleware(['auth'])->name('dashboard'); Route::resource('foods', FoodController::class)->middleware(['auth']); +Route::get('/foods/{food}/delete', [FoodController::class, 'delete']) + ->middleware(['auth']) + ->name('foods.delete'); Route::resource('recipes', RecipeController::class)->middleware(['auth']); Route::resource('journal-entries', JournalEntryController::class)->middleware(['auth']);