Для этого есть две возможности, одна из которых - простое использование построителя запросов БД.
$category = DB::table('categories')
->select('categories.*','photos.filename as cover')
->join('photos', 'photos.id', '=', 'categories.cover_id')
->where('categories.id',$id)->get();
во-вторых, я не понимаю, зачем нам нужен метод find (), который мы можем использовать там, где условие, пожалуйста, проверьте ниже, еслиэто работает для вас
$category = Category::leftJoin('photos', 'categories.cover_id', '=', 'photos.id')
->select('categories.*', 'photos.filename as cover')
->orderBy('sort', 'desc')
->where('categories.id',$id)
->first();
еще один способ
$category = Category::leftJoin('photos', function($join) {
$join->on('categories.cover_id', '=', 'photos.id');
})->where('categories.id',$id)
->select('categories.*', 'photos.filename as cover')->first();