2017-02-18 9 views
-1

내 리포지토리에서 querybuilder (또는 SQL 요청)를 수행해야합니다. 내가 검색 한 모든 예는 매우 복잡하고, 나는 내가 내 쿼리를 수행해야합니다 알고 RestaurantRepository이 나는 ​​RestaurantController 라는 이름의 컨트롤러가 기본 QueryBuilder기본 QueryBuilder - Symfony3

에 대한 기본적인 설명을 원했다.

class RestaurantRepository extends \Doctrine\ORM\EntityRepository 
{ 

} 

나는

그래서 기본적으로 내가 쿼리를 만들고 싶어 내 실체 내가

  • 이름
  • 도시 (ID를 하나 포함하지 않음) 2 열이 Restaurant.php라는이 나는 내 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' 또한이 queryBuilder를 내보기에 어떻게 전달할 수 있습니까? 당신은'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}}'와 같은 for 루프로 레스토랑 속성에 액세스 할 수 있습니다. 하나의 조언, 당신은 정말로 tuto을 따르거나 일부 문서를 읽어야합니다 ... – mickdev

+0

고맙습니다. 나는 많은 문서를 읽으려고 노력할 것입니다.하지만 언제 어디서부터 시작해야할지 모르겠지만 도움을 주셔서 감사합니다. 나는 당신의 대답을 적용 할 것입니다. –