Symfony의 "Book"에서는 다른 엔티티에 대한 참조로 엔티티에 대해 이야기합니다. 마찬가지로, "Post"엔티티를 참조하는 많은 "Comment"엔티티가있는 경우, 해당 ID로 포스트를로드 한 다음 $ post-> getComments()를 수행 할 수 있습니다.Doctrine을 사용하면 어떻게 EntityRepository에서 Entity 메소드에 액세스합니까?
댓글은 게으르며로드 된 것으로 보이며 한 장씩 이동하거나 각로드 (분명히 잘못됨)하거나 별도의 쿼리로 모두로드해야합니다. ,하지만 구체적으로 어디에 그 쿼리를 넣을지 모르겠습니다.) The Book, however, suggests : "물론 두 개체에 모두 액세스해야한다는 것을 알면 원래 쿼리에서 조인을 실행하여 두 번째 쿼리를 피할 수 있습니다." 내 (현재 비어있는) postRepository 클래스에 메소드를 추가 할 것을 권장합니다. \ 정의되지 않은 메서드의 교리 전화 : 내가 할, 그것은 다음과 같습니다
public function loadPostFull($pid)
{
return $this->getEntityManager()
->createQuery('
SELECT p, c FROM BUNDLENAME:Post p
JOIN p.comments c
WHERE p.id = :id')
->setParameter('id', $pid);
try {
return $query->getSingleResult();
} catch (\Doctrine\ORM\NoResultException $e) {
return null;
}
}
그리고 내 컨트롤러에서 내가 할 다음 :
$fullPost = $this->getDoctrine()
->getRepository('BUNDLENAME:Post')
->loadPostFull($id);
$id = $fullPost->getId();
을하지만 $ ID에 대한 내 간단한 요청이 "치명적인 오류를 제공 ORM \ Query :: getId() "를 참조하십시오. 나는 컨트롤러가 loadPostFull 메소드를 올바르게 찾는 것을 알고있다. 왜냐하면 내가 typo 이름을 붙이면 실패 할 것이기 때문이다. 적절한 Post 엔티티를 반환하지 않습니다. 컨트롤러를 변경하여 -> loadPostFull ($ id) 대신 find ($ id)를 사용하면 Post ID의 모든 내부 메소드를 사용할 수 있습니다.
설명서에 내가 할 수있는 것으로 보입니다! 뭐가 문제 야?
Welp, 당신이 해냈어! 정말 고맙습니다. 이제 와서 나머지 프로그램을 쓰고 싶니? :-D 위대한 작품. – Offlein
글쎄 이런 종류의 "오류"가 얼마나 끔찍한 지 압니다. 당신은 당신의 머리카락을 풀어 당신은 단지 그것을 알아 차리지 못합니다 :) – Viorel