Laravel API 応答に PHP Fractal ライブラリを使用しています。私のモデルはPost
ですComments
。私がやりたいことは、過去 X 日間に受け取ったコメントの量で並べ替えられたすべての投稿を取得することです。基本的にこの API 呼び出し:
GET /api/posts?include=comment_count:since_days(7)&sort=comment_count:desc`
そのためPostTransformer
、インクルード パラメータを解析し、このインクルードが要求された場合にプリミティブ リソースを追加するを使用しています。
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();
}
}
この問題の解決策はありますか?