search) { $this->searchQuery( $news, $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', 'content' ); } $this->sortQuery($news); $searchFields = trans('Titre, Contenu, Tags'); $news->orderBy('published_at', 'DESC'); $news = $news->paginate(); return view('back.news.index', compact('news', 'searchFields')); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { /** @var \Illuminate\Database\Eloquent\Collection */ $tags = Tag::query()->select(['id', 'name'])->get(); return view('back.news.create', compact('tags')); } /** * Store a newly created resource in storage. * * @param \App\Http\Requests\Bo\News\StoreNewsRequest $request * @return \Illuminate\Http\Response */ public function store(StoreNewsRequest $request) { return DB::transaction(function () use ($request) { $news = new News(); $news->fill($request->validated()); if ($news->saveOrFail()) { $news->tags()->sync(collect($request->tags)->pluck('id')); return redirect() ->route('back.news.edit', $news) ->with('success', trans( ':model a été créé', ['model' => Str::singular(trans('models.classes.news'))] )); } return back(); }); } /** * Show the form for editing the specified resource. * * @param \App\Models\News $news * @return \Illuminate\Http\Response */ public function edit(News $news) { /** @var \Illuminate\Database\Eloquent\Collection */ $tags = Tag::whereNotIn('id', $news->tags()->pluck('id')) ->select(['id', 'name'])->get(); return view('back.news.edit', [ 'newsModel' => $news, 'tags' => $tags ]); } /** * Update the specified resource in storage. * * @param \App\Http\Requests\Bo\News\UpdateNewsRequest $request * @param \App\Models\News $news * @return \Illuminate\Http\Response */ public function update(UpdateNewsRequest $request, News $news) { return DB::transaction(function () use ($request, $news) { $news->fill($request->validated()); $news->tags()->sync(collect($request->tags)->pluck('id')); if ($news->saveOrFail()) { return redirect() ->route('bo.news.edit', $news) ->with('success', trans( ':model a été mis à jour', ['model' => Str::singular(trans('models.classes.news'))] )); } return back(); }); } /** * Remove the specified resource from storage. * * @param \App\Models\News $news * @return \Illuminate\Http\Response */ public function destroy(News $news) { if ($news->deleteOrFail()) { return redirect() ->route('bo.news.index') ->with('warning', trans( ':model a bien été supprimé', ['model' => Str::singular(trans('models.classes.news'))] )); } return back(); } }