基本的QueryBuilder - Symfony3

时间:2017-02-18 14:10:03

标签: php symfony query-builder

我遇到了在我的某个存储库中执行querybuilder(或SQL请求)的问题。 我搜索的每个例子都非常复杂,我想要一个基本的QueryBuilder

的基本解释

我有一个名为RestaurantController的控制器 我有RestaurantRepository,我知道我应该查询。

class RestaurantRepository extends \Doctrine\ORM\EntityRepository
{

}

我的实体名为Restaurant.php,其中我有2列(不包括ID 1)

  • 名称

所以基本上我想查询一下我可以拿起我的city然后能够在我的视图中使用它。我怎样才能做到这一点? :/

我直接在我的控制器中创建了一个:

$em = $this->getDoctrine()->getManager();
$restaurants = $em->getRepository('AppBundle:Restaurant')->findBy(array('city' => $request->request->get('city')));

但是效果不好所以我真的想知道如何制作一个正确而简单的查询构建器。谢谢

1 个答案:

答案 0 :(得分:1)

如果您说“但这不起作用”,则应检查$request->request->get('city')是否返回有效的城市名称。在您的控制器中,您可以执行return var_dump($request->request->get('city')并验证您是否拥有预期的城市。在我看来,它应该是$request->get('city')。所以基本上:

$em = $this->getDoctrine()->getManager();
$currentCity = $request->request->get('city') 
return var_dump($currentCity)//make sur that you have a valid city
$restaurants = $em->getRepository('AppBundle:Restaurant')->findBy(array('city' => $currentCity));

您可以制作自定义查询,但这样做太过分了

class RestaurantRepository extends EntityRepository
{
    public function getRestaurantByCity($city)
    {
        $query = $this->createQueryBuilder('r')
                        ->where('r.city = :city')
                        ->setParameter('city', $city)
                          ;

        return $query->getQuery()->getResult();
    }
}