サービスのリストを返す REST GET メソッドがあります。クエリ リンクにパラメーターを指定することで、リストを並べ替えられるようにしたいと考えています。例: sort=price
- リストを価格で昇順で並べ替える場合、sort=-price
- 降順で並べ替えます
クエリは次のようになります。
http://127.0.0.1:8000/api/v1/services?sort=price
方法
public function searchAction(Request $request){
$sort = $request->query->get('sort');
$page = $request->query->getInt('page', 1);
$limit = $request->query->getInt('limit', 5);
$result = new JsonResponse();
$qb = $this->getDoctrine()->getRepository('AppBundle:Service')->createQueryBuilder('s');
if($sort != null){
if($sort == 'price'){
$qb->addOrderBy('s.price', 'ASC');
}
elseif($sort == '-price'){
$qb->addOrderBy('s.price', 'DESC');
}
}
$paginator = $this->get('knp_paginator');
$serviceListJson = $paginator->paginate(
$qb,
$page,
$limit
);
$result->setContent($serviceListJson);
return $result;
}
エラーが発生します
There is no component field [price] in the given Query (500 Internal Server Error)
サービスエンティティ
class Service{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="title", type="string")
*/
private $title;
/**
* @var int
*
* @ORM\Column(name="price", type="integer")
*/
private $price;
}
私はusing KNP PAginator
バンドルです