2012-11-01 150 views
0

目前我用symfony2和doctrine2開發了一個rest-api-app。我的API應該具有通過查詢字符串篩選結果的功能。 例如,下面的網址: http://example.com/api/users?orderBy=username%20DESC&limit=20Doctrine2查詢字符串查詢

我可以解析與parse_str($this->getRequest()->getQueryString(), $queryString);查詢字符串到ASSOC陣列。 有什麼功能,我可以提交數組和教條選擇相應的結果?類似於$users = $this->getDoctrine()->getRepository('UserBundle:User')->findByQueryString($queryString);

回答

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(); 
} 
0

您不應該使用parse_str訪問查詢字符串參數。

您可以使用$request->query訪問ParametersBag。你可以用$request->query->all()獲得一個數組。

您可以使用存儲庫的findBy方法,接受具有以下格式的數組:

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

所以,你可以做

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

但它不會支持orderBy參數。