get('per_page', 24)); $query = Artwork::public()->published(); if ($category) { $query->whereHas('categories', function ($q) use ($category) { $q->where('categories.id', $category->id); }); } if ($request->filled('q')) { $q = $request->get('q'); $query->where(function ($sub) use ($q) { $sub->where('title', 'like', '%' . $q . '%') ->orWhere('description', 'like', '%' . $q . '%'); }); } $sort = $request->get('sort', 'latest'); if ($sort === 'oldest') { $query->orderBy('published_at', 'asc'); } else { $query->orderByDesc('published_at'); } // Important: do NOT eager-load artwork_stats in listings $artworks = $query->cursorPaginate($perPage); return view('artworks.index', [ 'artworks' => $artworks, 'category' => $category, ]); } /** * Show a single artwork by slug. Ensure it's public, approved and not deleted. */ public function show(Artwork $artwork): View { if (! $artwork->is_public || ! $artwork->is_approved || $artwork->trashed()) { abort(404); } return view('artworks.show', ['artwork' => $artwork]); } }