Сортировать коллекцию ресурсов в Fractal по включенному примитиву

Я использую библиотеку PHP Fractal для своих ответов Laravel API. Моя модель Post это имеет много Comments, Я хочу отсортировать все сообщения по количеству комментариев, полученных за последние X дней. В основном это вызов API:

GET /api/posts?include=comment_count:since_days(7)&sort=comment_count:desc`

Поэтому я использую PostTransformer который анализирует параметр include и добавляет примитивный ресурс, если запрашивается включение:

class PostTransformer extends TransformerAbstract
{

// ...

public function includeCommentCount(Post $post, ParamBag $params = null)
{
$sinceDays = // ... extract from ParamBag

$commentCount = $post->getCommentCountAttribute($sinceDays);

return $this->primitive($commentCount);
}
}

Включение работает нормально и позволяет указать since_days параметры, как это предусмотрено в библиотеке Fractal. Тем не менее, я не уверен, как сортировать сообщения сейчас. Это мое PostController:

class PostController extends Controller
{
// ...

public function index(Request $request)
{
$orderCol, $orderBy = // ... parse the sort parameter of the request

// can't sort by comment_count here, as it is added later by the transformer
$paginator = Post::orderBy($orderCol, $orderBy)->paginate(20);
$posts = $paginator->getCollection();

// can't sort by comment_count here either, as Fractal doesn't allow sorting resources
return fractal()
->collection($posts, new PostTransformer())
->parseIncludes(['comment_count'])
->paginateWith(new IlluminatePaginatorAdapter($paginator))
->toArray();
}
}

Есть ли решение этой проблемы?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]