Pivot scaffolding and new views for adding beers
This commit is contained in:
@@ -2,9 +2,41 @@
|
|||||||
|
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Models\Beer;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Redirect;
|
||||||
|
|
||||||
class BeerController extends Controller
|
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');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Models\Beer;
|
||||||
use App\Models\BeerList;
|
use App\Models\BeerList;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
@@ -10,8 +11,9 @@ class BeerListController extends Controller
|
|||||||
{
|
{
|
||||||
public function show(BeerList $list)
|
public function show(BeerList $list)
|
||||||
{
|
{
|
||||||
|
$beers = Beer::all();
|
||||||
|
|
||||||
return view('list.show', compact('list'));
|
return view('list.show', compact('list', 'beers'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function create()
|
public function create()
|
||||||
@@ -33,4 +35,14 @@ class BeerListController extends Controller
|
|||||||
|
|
||||||
return redirect('/profile');
|
return redirect('/profile');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function addItem(Request $request, $id)
|
||||||
|
{
|
||||||
|
$beerId = $request->beer;
|
||||||
|
$list = BeerList::findOrFail($id);
|
||||||
|
|
||||||
|
// $list->beer()->attach($beerId);
|
||||||
|
|
||||||
|
dd($list->beer());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,6 @@ class Beer extends Model
|
|||||||
|
|
||||||
public function list()
|
public function list()
|
||||||
{
|
{
|
||||||
return $this->belongsToMany(BeerList::class);
|
return $this->belongsToMany(BeerList::class, 'beer_list_pivot', 'list_id', 'beer_id');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,6 @@ class BeerList extends Model
|
|||||||
|
|
||||||
public function beer()
|
public function beer()
|
||||||
{
|
{
|
||||||
return $this->hasMany(Beer::class);
|
return $this->belongsToMany(Beer::class, 'beer_list_pivot', 'beer_id', 'list_id');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ class CreateBeersTable extends Migration
|
|||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
Schema::create('beers', function (Blueprint $table) {
|
Schema::create('beers', function (Blueprint $table) {
|
||||||
$table->unsignedBigInteger('id');
|
$table->id();
|
||||||
$table->string('beer');
|
$table->string('beer');
|
||||||
$table->integer('rating');
|
$table->integer('rating');
|
||||||
$table->string('country');
|
$table->string('country');
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ use Illuminate\Database\Migrations\Migration;
|
|||||||
use Illuminate\Database\Schema\Blueprint;
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
class ListBeersPivotTable extends Migration
|
class BeerListPivot extends Migration
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Run the migrations.
|
* Run the migrations.
|
||||||
@@ -13,10 +13,10 @@ class ListBeersPivotTable extends Migration
|
|||||||
*/
|
*/
|
||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
Schema::create('list_beers_pivot', function (Blueprint $table) {
|
Schema::create('beer_list_pivot', function (Blueprint $table) {
|
||||||
$table->unsignedBigInteger('id');
|
$table->id();
|
||||||
$table->unsignedBigInteger('beer_id');
|
$table->foreignId('beer_id')->constrained();
|
||||||
$table->unsignedBigInteger('list_id');
|
$table->foreignId('list_id')->constrained();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -27,6 +27,6 @@ class ListBeersPivotTable extends Migration
|
|||||||
*/
|
*/
|
||||||
public function down()
|
public function down()
|
||||||
{
|
{
|
||||||
Schema::dropIfExists('list_beers_pivot');
|
//
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
29
resources/views/beer/create.blade.php
Normal file
29
resources/views/beer/create.blade.php
Normal 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
|
||||||
5
resources/views/beer/show.blade.php
Normal file
5
resources/views/beer/show.blade.php
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
@extends('layouts.app')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
|
||||||
|
@endsection
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div id="app">
|
<div id="app" class="bg-gray-600 min-h-screen">
|
||||||
<nav>
|
<nav>
|
||||||
<a class="" href="{{ url('/') }}">
|
<a class="" href="{{ url('/') }}">
|
||||||
{{ config('app.name', 'Laravel') }}
|
{{ config('app.name', 'Laravel') }}
|
||||||
|
|||||||
@@ -2,5 +2,32 @@
|
|||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
{{ $list->title }}
|
{{ $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
|
@endsection
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use App\Http\Controllers\BeerController;
|
||||||
use App\Http\Controllers\BeerListController;
|
use App\Http\Controllers\BeerListController;
|
||||||
use App\Http\Controllers\UserController;
|
use App\Http\Controllers\UserController;
|
||||||
use App\Models\BeerList;
|
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('/create-list', [BeerListController::class, 'create'])->name('list.create');
|
||||||
Route::get('/list/{list}', [BeerListController::class, 'show'])->name('list.show');
|
Route::get('/list/{list}', [BeerListController::class, 'show'])->name('list.show');
|
||||||
Route::post('/create-list', [BeerListController::class, 'store'])->name('list.store');
|
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');
|
||||||
|
|||||||
Reference in New Issue
Block a user