Browse Source

first iteration of search functionality - likely to fail hard

master
jk 3 years ago
parent
commit
415f82d9a5
  1. 76
      app/Http/Controllers/SearchController.php
  2. 6
      app/Models/Search.php
  3. 1
      resources/views/beers/index.blade.php
  4. 19
      resources/views/search/index.blade.php
  5. 6
      routes/web.php

76
app/Http/Controllers/SearchController.php

@ -3,8 +3,82 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Models\Summarie;
use App\Models\Brewerie;
use App\Models\Hopaddition;
use App\Models\Hop;
use App\Models\Grain;
use App\Models\Yeast;
use App\Models\Adjunct;
class SearchController extends Controller class SearchController extends Controller
{ {
//
public function search(Request $request){
// validation
$this->validate($request,[
'search' => 'required',
'table' => 'required',
]);
$search = request->input('search');
$table = request->input('table');
switch($table) {
case('summaries'):
$results = Summarie::where('keywords', 'LIKE', '%'.$search.'%')->orWhere('type', 'LIKE', '%'.$search.'%')->get();
foreach ($results as result) {
$brewery = Brewerie::where('id', $result->brewery_id)->value('name');
$result['brewery']=$brewery;
$hops = Hopaddition::where('beer_id', $result->beer_id)->distinct('hop_id');
$result['hops']=[];
$i = 0;
foreach ($hops as $hop){
$hopname = Hop::where('id', $hop->id)->value('name');
$result['hops'][$i]['id'] = $hop->id;
$result['hops'][$i]['name'] = $hopname;
$i++;
};
$grains = Grainbill::where('beer_id', $result->beer_id)->distinct('grain_id');
$result['grains']=[];
$i = 0;
foreach ($grains as $grain){
$grainname = Grain::where('id', $grain->id)->value('name');
$result['grains'][$i]['id'] = $grain->id;
$result['grains'][$i]['name'] = $grainname;
$i++;
};
$yeasts = Fermentation::where('beer_id', $result->beer_id)->distinct('yeast_id');
$result['yeasts']=[];
$i = 0;
foreach ($yeasts as $yeast){
$yeastname = Yeast::where('id', $yeast->id)->value('name');
$result['yeasts'][$i]['id'] = $yeast->id;
$result['yeasts'][$i]['name'] = $yeastname;
$i++;
};
$adjuncts = Adjunctaddition::where('beer_id', $result->beer_id)->distinct('adjunct_id');
$result['adjuncts']=[];
$i = 0;
foreach ($adjuncts as $adjunct){
$adjunctname = Adjunct::where('id', $adjunct->id)->value('name');
$result['adjuncts'][$i]['id'] = $adjunct->id;
$result['adjuncts'][$i]['name'] = $hopname;
$i++;
};
}
break;
case('breweries'):
break;
case('hops'):
break;
case('yeasts'):
break;
default:
$msg = "You fucked up somehow!";
$results = $results::sortable()->paginate(10);
return('search.results')->with($results);
}
} }

6
app/Models/Search.php

@ -2,10 +2,12 @@
namespace App\Models; namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Kyslik\ColumnSortable\Sortable;
class Search extends Model class Search extends Model
{ {
use HasFactory;
use Sortable;
public $sortable = ['name', 'keywords', 'brewery', 'hops', 'grains', 'yeasts', 'adjuncts'];
} }

1
resources/views/beers/index.blade.php

@ -6,6 +6,7 @@
<div class="col-md-12"> <div class="col-md-12">
<div class="card"> <div class="card">
@include('inc.navbar') @include('inc.navbar')
@include('search.index')
<div class="card-header"><a href="/home">Home</a> -> {{ __('Beer List') }}<span class="backlink"><a href="{{url()->previous()}}">Go Back</a></span></div> <div class="card-header"><a href="/home">Home</a> -> {{ __('Beer List') }}<span class="backlink"><a href="{{url()->previous()}}">Go Back</a></span></div>
<div class="card-body"> <div class="card-body">

19
resources/views/search/index.blade.php

@ -0,0 +1,19 @@
<form method="post" action="{{ route('search.results') }}">
@csrf
<div class="form-group">
<label for="search">Search</label>
<input type="text" class="form-control" name="search" >
</div>
<div class="form-group">
<legend>Select table: </legend>
<input type="radio" id="summarie" value="summarie" class="form-control" name="table" checked>
<label for="summarie">Beers</label>
<input type="radio" id="brewerie" value="brewerie" class="form-control" name="table" >
<label for="">Breweries</label>
<input type="radio" id="hops" value="hops" class="form-control" name="table" >
<label for="">Hops</label>
<input type="radio" id="yeasts" value="yeast" class="form-control" name="table" >
<label for="">Yeasts</label>
</div>
<button type="submit" class="btn btn-primary">Add Mash Step</button>
</form>

6
routes/web.php

@ -1,7 +1,7 @@
<?php <?php
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use App\Models\Search;
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Web Routes | Web Routes
@ -40,3 +40,7 @@ Route::get('/grain/{grainID}', [App\Http\Controllers\GraincardController::class,
Route::get('/yeast/{yeastID}', [App\Http\Controllers\YeastcardController::class, 'index'])->name('yeast'); Route::get('/yeast/{yeastID}', [App\Http\Controllers\YeastcardController::class, 'index'])->name('yeast');
Route::get('/hop/{hopID}', [App\Http\Controllers\HopcardController::class, 'index'])->name('hop'); Route::get('/hop/{hopID}', [App\Http\Controllers\HopcardController::class, 'index'])->name('hop');
Route::get('/adjunct/{adjunctID}', [App\Http\Controllers\AdjunctcardController::class, 'index'])->name('adjunct'); Route::get('/adjunct/{adjunctID}', [App\Http\Controllers\AdjunctcardController::class, 'index'])->name('adjunct');
Route::get('search.results', function(){
$searchresults = Search::sortable()->paginate(20);
return view('search.results', compact('searchresults'));
});
Loading…
Cancel
Save