Level 3
Turns out this solves my problem.
public function __invoke(ShowCategoriesRequest $request)
{
$categories = Category::query();
if ($request->input('author')) {
$author = Author::where('slug', $request->input('author'))->first();
$authorCategories = DB::table('posts')
->where('author_id', $author->id)
->join('categorizables', 'posts.id', 'categorizables.categorizable_id')
->where('categorizables.categorizable_type', 'App\Models\Post')
->join('categories', 'categories.id', 'categorizables.category_id')
->select('categories.slug')
->distinct()
->get()
->pluck('slug')
->toArray();
$categories = $categories->whereIn('slug', $authorCategories);
}
return $categories->get()
}