1

サービスのリストを返す 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バンドルです

4

2 に答える 2

3

sortableクエリでソートするために、config.yml でKNP バンドルの機能を無効にしました

 knp_paginator:
    default_options:
       sort_field_name: ~ # Disable sorting
于 2016-09-08T15:45:05.673 に答える