Php Doctrine2查询字符串查询

Php Doctrine2查询字符串查询,php,symfony,doctrine-orm,query-string,Php,Symfony,Doctrine Orm,Query String,目前,我用symfony2和doctrine2开发了一个RESTAPI应用程序。我的API应该具有通过查询字符串过滤结果的功能。 例如,以下url: http://example.com/api/users?orderBy=username%20DESC&limit=20 我可以用parse_str($this->getRequest()->getQueryString(),$querystring)解析querystring到关联数组。 是否有任何函数可以提交数组并选择相应的结果?类似于$us

目前,我用symfony2和doctrine2开发了一个RESTAPI应用程序。我的API应该具有通过查询字符串过滤结果的功能。 例如,以下url:
http://example.com/api/users?orderBy=username%20DESC&limit=20

我可以用
parse_str($this->getRequest()->getQueryString(),$querystring)解析querystring到关联数组。

是否有任何函数可以提交数组并选择相应的结果?类似于
$users=$this->getDoctrine()->getRepository('UserBundle:User')->findByQueryString($queryString)

您不应该使用
parse\u str
访问查询字符串参数

您可以通过
$request->query
访问参数sbag。您可以使用
$request->query->all()
获得一个数组

您可以使用存储库的
findBy
方法,该方法接受以下格式的数组:

array(
    'field' => 'value',
    'field2' => 'value2',
)
所以你可以

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

但是它不支持
orderBy
参数。

正如AdrienBrault所说,不要使用
parse\u 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();
}