2014-09-02 1 views
0

저는 Symfony를 처음 접하고 Symfony 웹 사이트의 책을 읽고 정확히 this 섹션을 읽습니다.Symfony 가입 관련 기록

첫 번째 예에서 다음 함수는 두 개의 테이블 productcategory에 가입하는 데 사용되며 그것은 완벽한 이해를하고있다

public function findOneByIdJoinedToCategory($id) 
{ 
    $query = $this->getEntityManager() 
     ->createQuery(
      'SELECT p, c FROM AcmeStoreBundle:Product p 
      JOIN p.category c 
      WHERE p.id = :id' 
     )->setParameter('id', $id); 

    try { 
     return $query->getSingleResult(); 
    } catch (\Doctrine\ORM\NoResultException $e) { 
     return null; 
    } 
} 

내가 이해 해달라고하는 것은 두 번째 예는,

public function showAction($id) 
{ 
    $product = $this->getDoctrine() 
     ->getRepository('AcmeStoreBundle:Product') 
     ->findOneByIdJoinedToCategory($id); 

    $category = $product->getCategory(); 
} 

첫 번째 함수에서 두 테이블이 조인 될 때 ​​두 번째 함수에서 $category = $product->getCategory();의 목적은 무엇입니까?

이 코드 $category = $product->getCategory();으로이 문제는 내가 그것을두면 그것이 잘 작동 그대로입니다 IF 제품에 할당 된 범주가 있습니다 만, 제품이 할당 된 범주가없는 경우 내가 오류를 얻을

Call to a member function getCategory() on a non-object

내가 코드 $category = $product->getCategory();를 제거하고 어떤 카테고리가 나는 사람이 t을 설명 할 수 있다면 내가 404

정말 감사합니다해야 오류가 다음 할당되지 않은 제품에 액세스하는 경우 왜 이런 일이 일어나는가?

+0

엔티티가 양방향으로 조인되는 동안 select에 'p'와 'c'가 없다고 말할 수 있습니다. '$ product'가 비어 있지 않은지 확인하는 것은 레코드를 찾을 수 없거나 둘 이상의 레코드를 찾은 경우'getSingleResult'가 예외를 throw하고 함수가'null'을 반환하기 때문에입니다. 그 오류에 당신이 오류가 오면. – Javad

+0

고마워,하지만 왜'join'이 이미 카테고리를 가져올 때이 코드'$ category = $ product-> getCategory();'를 사용하는지 궁금해했다. – Baig

+0

함수는 제품을 반환하기 때문에. 카테고리를 얻으려면 어떻게 생각하십니까? 범주를 조인하기 위해 쿼리를 사용하는 것은 범주를 원할 때 추가 SQL 문이 필요한 지연로드를 피하는 것입니다. – Cerad

답변

1

줄 $ category = $ product-> getCategory(); 이 변수 $ 카테고리가 필요하지 않으면 쓸모가 없습니다. 쿼리에서이 줄을 조인하지 않은 경우 $ category = $ product-> getCategory(); 데이터베이스에 또 다른 쿼리를 만들어 카테고리를 가져옵니다.

나뭇 가지 {{product.category.name}}은 JOIN이없고 관계가 없으면 범주가 null이되며 $ category = $ product-> getCategory()와 관련이 없습니다. 암호.

관련 문제