저는 Symfony를 처음 접하고 Symfony 웹 사이트의 책을 읽고 정확히 this 섹션을 읽습니다.Symfony 가입 관련 기록
첫 번째 예에서 다음 함수는 두 개의 테이블 product
및 category
에 가입하는 데 사용되며 그것은 완벽한 이해를하고있다
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
정말 감사합니다해야 오류가 다음 할당되지 않은 제품에 액세스하는 경우 왜 이런 일이 일어나는가?
엔티티가 양방향으로 조인되는 동안 select에 'p'와 'c'가 없다고 말할 수 있습니다. '$ product'가 비어 있지 않은지 확인하는 것은 레코드를 찾을 수 없거나 둘 이상의 레코드를 찾은 경우'getSingleResult'가 예외를 throw하고 함수가'null'을 반환하기 때문에입니다. 그 오류에 당신이 오류가 오면. – Javad
고마워,하지만 왜'join'이 이미 카테고리를 가져올 때이 코드'$ category = $ product-> getCategory();'를 사용하는지 궁금해했다. – Baig
함수는 제품을 반환하기 때문에. 카테고리를 얻으려면 어떻게 생각하십니까? 범주를 조인하기 위해 쿼리를 사용하는 것은 범주를 원할 때 추가 SQL 문이 필요한 지연로드를 피하는 것입니다. – Cerad