2017-02-18 22 views
-1

Я столкнулся с тем, чтобы сделать querybuilder (или запрос SQL) в одном из моих репозиториев. Каждый пример, я искал довольно сложный, и я хотел основное объяснение основного QueryBuilderBasic QueryBuilder - Symfony3

У меня есть контроллер с именем RestaurantController У меня есть RestaurantRepository, где я знаю, что я должен сделать мой запрос.

class RestaurantRepository extends \Doctrine\ORM\EntityRepository 
{ 

} 

У меня есть объект, называемый Restaurant.php, где у меня есть 2 колонки (не включая идентификатор одного)

  • Название
  • City

Поэтому в основном я хочу, чтобы сделать запрос где я могу забрать мой 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

Привет! Большое спасибо за ваш ответ! Я думал, что никто не ответит мне :) Можете ли вы объяснить мне, почему вы кладете '' r'' в createQueryBuilder? что означает все эти пунктуации? '=: city' Также как передать этот запросBuilder на мой взгляд? вы написали 'return $ query-> getQuery() -> getResult();' так как я могу узнать и использовать его в своей ветке? –

+0

Вы действительно должны взглянуть на [doc] (http://symfony.com/doc/current/doctrine.html#querying-for-objects-using-doctrine-s-query-builder). Тем не менее, '' r'' является псевдонимом (вы можете назвать его «bestDevEver», если хотите). '=: city', если поле города равно заданной строке. Чтобы избежать инъекции SQL, вы создаете локальную переменную в запросе и присваиваете ее значение 'setParameter()'. В шаблоне ветки вы можете получить доступ к свойствам ресторана в цикле, например, {{restaurant.city}} '. Один совет, вы должны действительно следовать за туто или читать некоторые документы ... – mickdev

+0

Спасибо, я попробую, я прочитал много документов, но я всегда не знаю, с чего начать, но спасибо за вашу помощь. Я отвечу на ваш ответ. –