122 lines
4.5 KiB
PHP
122 lines
4.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Fo;
|
|
|
|
use App\Enums\Advices\AdviceTypeEnum;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Advice;
|
|
use App\Models\News;
|
|
use App\Models\Product;
|
|
use Illuminate\Http\Request;
|
|
|
|
class SearchController extends Controller
|
|
{
|
|
/**
|
|
* Search input txt in products, articles and recipes
|
|
*
|
|
* @param Request $request
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function search(Request $request)
|
|
{
|
|
$filter = $request->query('search') ?? '';
|
|
$model = $request->query('model');
|
|
$products = [];
|
|
$articles = [];
|
|
$recipes = [];
|
|
|
|
if (is_array($filter)) {
|
|
abort(400);
|
|
}
|
|
if (is_string($model)) {
|
|
return $this->callAction('searchModel', [$model, $filter]);
|
|
}
|
|
$products = Product::where('status', true)
|
|
->where(function ($query) use ($filter) {
|
|
$query->where('label', 'like', '%' . $filter . '%');
|
|
$query->orWhere('ingredients', 'like', '%' . $filter . '%');
|
|
$query->orWhere('advantage', 'like', '%' . $filter . '%');
|
|
$query->orWhere('preparation', 'like', '%' . $filter . '%');
|
|
})
|
|
->limit(3)
|
|
->get();
|
|
$news = News::where('status', true)
|
|
->where(function ($query) use ($filter) {
|
|
$query->where('title', 'like', '%' . $filter . '%');
|
|
$query->orWhere('subtitle', 'like', '%' . $filter . '%');
|
|
$query->orWhere('content', 'like', '%' . $filter . '%');
|
|
$query->orWhere('content2', 'like', '%' . $filter . '%');
|
|
})
|
|
->with('categories')
|
|
->limit(3)
|
|
->get();
|
|
$recipes = Advice::where('status', true)
|
|
->where('type', '=', AdviceTypeEnum::recipes()->value)
|
|
->where(function ($query) use ($filter) {
|
|
$query->where('title', 'like', '%' . $filter . '%');
|
|
$query->orWhere('preparation', 'like', '%' . $filter . '%');
|
|
$query->orWhere('advice', 'like', '%' . $filter . '%');
|
|
$query->orWhere('ingredients', 'like', '%' . $filter . '%');
|
|
})
|
|
->with(['tags'])
|
|
->limit(3)
|
|
->get();
|
|
|
|
return view('fo.pages.search-list', compact('products', 'news', 'recipes'));
|
|
}
|
|
|
|
/**
|
|
* Undocumented function
|
|
*
|
|
* @param string $name
|
|
* @param string $filter
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function searchModel(string $name, string $filter)
|
|
{
|
|
$models = [];
|
|
|
|
switch ($name) {
|
|
case 'product':
|
|
$models = Product::where('status', true)
|
|
->where(function ($query) use ($filter) {
|
|
$query->where('label', 'like', '%' . $filter . '%');
|
|
$query->orWhere('ingredients', 'like', '%' . $filter . '%');
|
|
$query->orWhere('advantage', 'like', '%' . $filter . '%');
|
|
$query->orWhere('preparation', 'like', '%' . $filter . '%');
|
|
})
|
|
->paginate(6);
|
|
break;
|
|
|
|
case 'news':
|
|
$models = News::where('status', true)
|
|
->where(function ($query) use ($filter) {
|
|
$query->where('title', 'like', '%' . $filter . '%');
|
|
$query->orWhere('subtitle', 'like', '%' . $filter . '%');
|
|
$query->orWhere('content', 'like', '%' . $filter . '%');
|
|
$query->orWhere('content2', 'like', '%' . $filter . '%');
|
|
})
|
|
->with('categories')
|
|
->paginate(6);
|
|
break;
|
|
|
|
case 'recipe':
|
|
$models = Advice::where('status', true)
|
|
->where('type', '=', AdviceTypeEnum::recipes()->value)
|
|
->where(function ($query) use ($filter) {
|
|
$query->where('title', 'like', '%' . $filter . '%');
|
|
$query->orWhere('preparation', 'like', '%' . $filter . '%');
|
|
$query->orWhere('advice', 'like', '%' . $filter . '%');
|
|
$query->orWhere('ingredients', 'like', '%' . $filter . '%');
|
|
})
|
|
->with(['tags'])
|
|
->paginate(6);
|
|
break;
|
|
|
|
default:
|
|
abort(400);
|
|
} //end switch
|
|
|
|
return view('fo.pages.search', compact('name', 'models'));
|
|
}
|
|
}
|