search) { $this->searchQuery( $products, $request->search, // * Search in tags function ($q) use ($request) { $q->orWhereHas('tags', function ($q) use ($request) { $q->whereRaw( 'UPPER(CONCAT(`tags`.`name`)) LIKE UPPER(?)', ['%' . filter_var($request->search, FILTER_SANITIZE_STRING) . '%'] ); }); }, 'title', 'description' ); } $this->sortQuery($products); $searchFields = trans('Titre, Description'); $products->orderBy('updated_at', 'DESC'); $products = $products->paginate(); return view('back.products.index', compact('products', 'searchFields')); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { $ranges = Range::all(); return view('back.products.create', compact('ranges')); } /** * Store a newly created resource in storage. * * @param \App\Http\Requests\Bo\Products\StoreProductRequest $request * @return \Illuminate\Http\Response */ public function store(StoreProductRequest $request) { return DB::transaction(function () use ($request) { $product = new Product(); $product->fill($request->validated()); if ($product->saveOrFail()) { return redirect() ->route('bo.products.edit', $product) ->with('success', trans( ':model a été créé', ['model' => Str::singular(trans('models.classes.products'))] )); } return back(); }); } /** * Show the form for editing the specified resource. * * @param \App\Models\Product $product * @return \Illuminate\Http\Response */ public function edit(Product $product) { $ranges = Range::all(); return view('back.products.edit', [ 'productModel' => $product, 'ranges' => $ranges, ]); } /** * Update the specified resource in storage. * * @param \App\Http\Requests\Bo\Products\UpdateProductRequest $request * @param \App\Models\Product $product * @return \Illuminate\Http\Response */ public function update(UpdateProductRequest $request, Product $product) { return DB::transaction(function () use ($request, $product) { $product->fill($request->validated()); /** @var \App\Models\IncoNutritionalValue */ $nut = $product->incoNutritionalValues()->firstOrNew(); $nut->fill($request->validated()); $nut->saveOrFail(); if ($product->saveOrFail()) { return redirect() ->route('bo.products.edit', $product) ->with('success', trans( ':model a été mis à jour', ['model' => Str::singular(trans('models.classes.products'))] )); } return back(); }); } /** * Remove the specified resource from storage. * * @param \App\Models\Product $product * @return \Illuminate\Http\Response */ public function destroy(Product $product) { if ($product->deleteOrFail()) { return redirect() ->route('bo.products.index') ->with('warning', trans( ':model a bien été supprimé', ['model' => Str::singular(trans('models.classes.products'))] )); } return back(); } }