Pivot scaffolding and new views for adding beers

This commit is contained in:
2021-09-05 02:09:38 +02:00
parent 26dbfeb94a
commit f4c030934a
11 changed files with 124 additions and 13 deletions

View File

@@ -2,9 +2,41 @@
namespace App\Http\Controllers;
use App\Models\Beer;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Redirect;
class BeerController extends Controller
{
//
public function show()
{
}
public function create()
{
return view('beer.create');
}
public function store(Request $request)
{
$this->validate($request, [
'beer' => 'required',
'rating' => 'required',
'country' => 'required',
'type' => 'required',
]);
$beer = new Beer;
$beer->beer = $request->beer;
$beer->rating = $request->rating;
$beer->country = $request->country;
$beer->type = $request->type;
$beer->review = $request->review;
$beer->save();
return redirect('/profile');
}
}

View File

@@ -2,6 +2,7 @@
namespace App\Http\Controllers;
use App\Models\Beer;
use App\Models\BeerList;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
@@ -10,8 +11,9 @@ class BeerListController extends Controller
{
public function show(BeerList $list)
{
$beers = Beer::all();
return view('list.show', compact('list'));
return view('list.show', compact('list', 'beers'));
}
public function create()
@@ -33,4 +35,14 @@ class BeerListController extends Controller
return redirect('/profile');
}
public function addItem(Request $request, $id)
{
$beerId = $request->beer;
$list = BeerList::findOrFail($id);
// $list->beer()->attach($beerId);
dd($list->beer());
}
}

View File

@@ -11,6 +11,6 @@ class Beer extends Model
public function list()
{
return $this->belongsToMany(BeerList::class);
return $this->belongsToMany(BeerList::class, 'beer_list_pivot', 'list_id', 'beer_id');
}
}

View File

@@ -21,6 +21,6 @@ class BeerList extends Model
public function beer()
{
return $this->hasMany(Beer::class);
return $this->belongsToMany(Beer::class, 'beer_list_pivot', 'beer_id', 'list_id');
}
}

View File

@@ -14,7 +14,7 @@ class CreateBeersTable extends Migration
public function up()
{
Schema::create('beers', function (Blueprint $table) {
$table->unsignedBigInteger('id');
$table->id();
$table->string('beer');
$table->integer('rating');
$table->string('country');

View File

@@ -4,7 +4,7 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class ListBeersPivotTable extends Migration
class BeerListPivot extends Migration
{
/**
* Run the migrations.
@@ -13,10 +13,10 @@ class ListBeersPivotTable extends Migration
*/
public function up()
{
Schema::create('list_beers_pivot', function (Blueprint $table) {
$table->unsignedBigInteger('id');
$table->unsignedBigInteger('beer_id');
$table->unsignedBigInteger('list_id');
Schema::create('beer_list_pivot', function (Blueprint $table) {
$table->id();
$table->foreignId('beer_id')->constrained();
$table->foreignId('list_id')->constrained();
});
}
@@ -27,6 +27,6 @@ class ListBeersPivotTable extends Migration
*/
public function down()
{
Schema::dropIfExists('list_beers_pivot');
//
}
}

View File

@@ -0,0 +1,29 @@
@extends('layouts.app')
@section('content')
Create Beer
<form method="POST" action="{{ route('beer.store') }}">
@csrf
<label for="beer">
Beer Name
</label>
<input type="text" name="beer">
<label for="rating">
Rating
</label>
<input type="number" name="rating">
<label for="country">
Country
</label>
<input type="text" name="country">
<label for="type">
Beer Type
</label>
<input type="text" name="type">
<label for="review">
Review
</label>
<textarea name="review" style="resize:none"></textarea><
<button type="submit">Add Beer</button>
</form>
@endsection

View File

@@ -0,0 +1,5 @@
@extends('layouts.app')
@section('content')
@endsection

View File

@@ -22,7 +22,7 @@
</head>
<body>
<div id="app">
<div id="app" class="bg-gray-600 min-h-screen">
<nav>
<a class="" href="{{ url('/') }}">
{{ config('app.name', 'Laravel') }}

View File

@@ -2,5 +2,32 @@
@section('content')
{{ $list->title }}
<form method="POST" action="{{ route('list.additem', $list->id) }}">
@csrf
<select name="beer">
<option hidden>
-Add Beer-
</option>
@foreach ($beers as $beer)
<option value="{{ $beer->id }}">
<div class="w-20">
<p>
{{ $beer->beer }}
</p>
<br>
<p>
Rating: {{ $beer->rating }}
</p>
</div>
</option>
@endforeach
</select>
<button type="submit">
Add beer
</button>
</form>
<a href="{{ route('beer.create') }}">
Can't find your beer?
</a>
@endsection

View File

@@ -1,5 +1,6 @@
<?php
use App\Http\Controllers\BeerController;
use App\Http\Controllers\BeerListController;
use App\Http\Controllers\UserController;
use App\Models\BeerList;
@@ -29,3 +30,8 @@ Route::get('/profile', [UserController::class, 'index']);
Route::get('/create-list', [BeerListController::class, 'create'])->name('list.create');
Route::get('/list/{list}', [BeerListController::class, 'show'])->name('list.show');
Route::post('/create-list', [BeerListController::class, 'store'])->name('list.store');
Route::post('/add-item/{list}', [BeerListController::class, 'addItem'])->name('list.additem');
//Beer Routes
Route::get('/create-beer', [BeerController::class, 'create'])->name('beer.create');
Route::post('/create-beer', [BeerController::class, 'store'])->name('beer.store');