user()->id; $sort = (string) $request->query('sort', 'date'); $allowed = ['date', 'name', 'dls', 'category', 'comments']; if (! in_array($sort, $allowed, true)) { $sort = 'date'; } $categorySub = DB::table('artwork_category as ac') ->join('categories as c', 'ac.category_id', '=', 'c.id') ->select('ac.artwork_id', DB::raw('MIN(c.name) as category_name')) ->groupBy('ac.artwork_id'); $query = DB::table('artworks as a') ->leftJoinSub($categorySub, 'cat', function ($join) { $join->on('a.id', '=', 'cat.artwork_id'); }) ->where('a.user_id', $userId) ->select([ 'a.*', DB::raw('cat.category_name as category_name'), ]) ->selectRaw('(SELECT COUNT(*) FROM artwork_comments WHERE artwork_id = a.id) AS num_comments'); if ($sort === 'name') { $query->orderBy('a.name', 'asc'); } elseif ($sort === 'dls') { $query->orderByDesc('a.dls'); } elseif ($sort === 'category') { $query->orderBy('cat.category_name', 'asc'); } elseif ($sort === 'comments') { $query->orderByDesc('num_comments'); } else { $query->orderByDesc('a.published_at')->orderByDesc('a.id'); } $artworks = $query->paginate(20)->appends(['sort' => $sort]); $artworks->getCollection()->transform(function ($row) { $thumb = ThumbnailPresenter::present($row, 'sm'); $row->thumb_url = $thumb['url'] ?? ''; $row->thumb_srcset = $thumb['srcset'] ?? null; return $row; }); return view('user.statistics', [ 'artworks' => $artworks, 'sort' => $sort, 'page_title' => 'Artwork Statistics', ]); } }