目前我使用symfony2和doctrine2开发了一个rest-api-app。我的API应该具有通过查询字符串过滤结果的功能。
例如,以下网址:
http://example.com/api/users?orderBy=username%20DESC&limit=20
我可以使用parse_str($this->getRequest()->getQueryString(), $queryString);
将查询字符串解析为assoc数组。
是否有任何函数可以提交数组和doctrine选择相应的结果?像$users = $this->getDoctrine()->getRepository('UserBundle:User')->findByQueryString($queryString);
答案 0 :(得分: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();
}
答案 1 :(得分:0)
您不应使用parse_str
来访问查询字符串参数。
您可以使用$request->query
访问ParametersBag。你可以得到一个$request->query->all()
的数组。
您可以使用存储库的findBy
方法,该方法接受具有以下格式的数组:
array(
'field' => 'value',
'field2' => 'value2',
)
所以你可以做到
$users = $userRepository->findBy($request->query->all());
但它不支持orderBy
参数。