2017-02-18 83 views
-1

我面对我的资料库中的一个做QueryBuilder的(或SQL请求)。 我找遍每一个例子都相当复杂,我想一个基本的QueryBuilder基本的QueryBuilder - Symfony3

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

class RestaurantRepository extends \Doctrine\ORM\EntityRepository 
{ 

} 

我有我的实体,称为Restaurant.php在那里我有2列(不包括ID之一)

  • 名称

所以基本上我想要做一个查询在那里我可以拿起我的city,然后在我看来可以用这个工作。我怎样才能做到这一点? :/

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

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

但这都不尽如人意,所以我真的想知道如何作出适当的和简单的QueryBuilder。谢谢

+0

一步一步?从这里开始:http://symfony.com/doc/current/doctrine.html – Cerad

回答

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

您好!非常感谢您的回答!我想没有人会回答我:) 你能解释我为什么你把''在createQueryBuilder r''?什么代表所有这些标点? '=:城市' 另外我怎样才能通过这个queryBuilder到我的观点?你写了'return $ query-> getQuery() - > getResult();'我怎么才能知道并在我的树枝中使用它? –

+0

你真的应该看看到[DOC](http://symfony.com/doc/current/doctrine.html#querying-for-objects-using-doctrine-s-query-builder)。也就是说,'r'是一个别名(如果你愿意,可以称它为'bestDevEver')。 '=:城市“是指城市字段等于给定字符串的提取餐馆。为避免SQL注入,您在查询中创建一个局部变量,并通过'setParameter()'指定其值。在你的树枝模板中,你可以通过'{{restaurant.city}}''来访问for循环中的餐厅属性。一个提醒,你应该遵循政党成员或阅读一些文件... – mickdev

+0

谢谢,我会努力,我看了很多文档,但我总是不知道从哪里开始,但感谢你的帮助。我会用你的答案。 –