Php Doctrine2查询字符串查询
目前,我用symfony2和doctrine2开发了一个RESTAPI应用程序。我的API应该具有通过查询字符串过滤结果的功能。 例如,以下url: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
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();
}