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);
 }
Example #2
0
 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]);
     }
 }
Example #4
0
|
*/
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]);
});