0

現在、symfony2とdoctrine2を使用してrest-api-appを開発しています。私のAPIには、クエリ文字列で結果をフィルタリングする機能が必要です。たとえば、次のURL: http://example.com/api/users?orderBy=username%20DESC&limit=20

クエリ文字列をparse_str($this->getRequest()->getQueryString(), $queryString);連想配列に解析できます。配列をコミットしてdoctrineが対応する結果を選択できる関数はありますか?何かのようなもの$users = $this->getDoctrine()->getRepository('UserBundle:User')->findByQueryString($queryString);

4

2 に答える 2

1

AdrienBraultが言ったようparse_strに、代わりにこれをコントローラーに入れてはいけません。

$orderBy = $this->get('request')->query->get('orderBy');
$limit = $this->get('request')->query->get('limit');
$rep = $this->getDoctrine()->getRepository('UserBundle:User');
$users = $rep->findLimitOrderBy($orderBy, $limit);

そして、ユーザーリポジトリクラス内:

public function findLimitOrderBy($orderBy, $limit)
{
$query = $this->getEntityManager()
    ->createQuery('
    SELECT u FROM UserBundle:User u
    ORDER BY u.'.$orderBy
    )
    ->setMaxResults($limit);

    return $query->getResult();
}
于 2012-11-01T21:37:42.013 に答える
0

parse_strクエリ文字列パラメータへのアクセスには使用しないでください。

を使用してParametersBagにアクセスできます$request->query。で配列を取得できます$request->query->all()

findBy次の形式の配列を受け入れるリポジトリのメソッドを使用できます。

array(
    'field' => 'value',
    'field2' => 'value2',
)

だからあなたはすることができます

$users = $userRepository->findBy($request->query->all());

orderByただし、パラメータはサポートされません。

于 2012-11-01T20:30:43.103 に答える