public function getSearch(Request $request) { $search = $request->get('query'); $articles = Article::published()->join('users', 'users.id', '=', 'articles.user_id')->where(function ($q) use($search) { $q->where('title', 'like', '%' . $search . '%')->orWhere(function ($query) use($search) { $query->where('users.name', 'like', '%' . $search . '%')->orWhere('users.surname', 'like', '%' . $search . '%')->orWhere(\DB::raw('concat(users.name, \' \', users.surname)'), 'like', '%' . $search . '%'); })->orWhere(function ($query) use($search) { $tag = array_flatten(Tag::where('name', 'like', '%' . $search . '%')->get(['id'])->toArray()); $articleTagMapper = array_flatten(ArticleTagMapper::whereIn('tag_id', $tag)->distinct()->get(['article_id'])->toArray()); $query->whereIn('id', $articleTagMapper); }); })->get(['articles.id', 'articles.title']); return response()->json($articles); }
public function tags() { $articleMapper = array_flatten(ArticleTagMapper::where('article_id', '=', $this->id)->get(['tag_id'])->toArray()); $tags = Tag::whereIn('id', $articleMapper); return $tags; }
public function postDelete(Request $request) { if ($request->ajax()) { $input = $request->only(['id']); $article = Article::findBySlugOrIdOrFail($input['id']); ArticleTagMapper::where('article_id', '=', $article->id)->delete(); $article->delete(); $count = Auth::user()->articles()->draft()->count(); return response()->json(['status' => 'success', 'count' => $count]); } }
| */ use App\Models\Article; use App\Models\ArticleTagMapper; use App\Models\Tag; use App\Models\User; Route::get('/', function () { $articles = Article::published(); $search = false; if ($search = Request::get('search')) { $articles->join('users', 'users.id', '=', 'articles.user_id')->where(function ($q) use($search) { $q->where('title', 'like', '%' . $search . '%')->orWhere(function ($query) use($search) { $query->where('users.name', 'like', '%' . $search . '%')->orWhere('users.surname', 'like', '%' . $search . '%')->orWhere(DB::raw('concat(users.name, \' \', users.surname)'), 'like', '%' . $search . '%'); })->orWhere(function ($query) use($search) { $tag = array_flatten(Tag::where('name', 'like', '%' . $search . '%')->get(['id'])->toArray()); $articleTagMapper = array_flatten(ArticleTagMapper::whereIn('tag_id', $tag)->distinct()->get(['article_id'])->toArray()); $query->whereIn('articles.id', $articleTagMapper); }); }); } $articles = $articles->orderBy('articles.updated_at', 'desc')->select(DB::raw('articles.id, articles.text, articles.title, articles.slug, articles.user_id, articles.updated_at'))->paginate(5); $topUsers = Article::published()->limit(3)->groupBy('user_id')->orderByRaw('count(user_id) DESC')->get(); $bestUsers = User::all(); $bestUsers = collect($bestUsers->sortByDesc(function ($user) { return $user->average_rating; }))->reject(function ($user) { return $user->average_rating == 0; }); $bestUsers = $bestUsers->slice(0, 3); return view('index', ['articles' => $articles, 'topUsers' => $topUsers, 'bestUsers' => $bestUsers, 'search' => $search]); });