Doctrine2查询字符串查询

时间:2012-11-01 20:24:57

标签: php symfony doctrine-orm query-string

目前我使用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);

这样的东西

2 个答案:

答案 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参数。