한 페이지에 여러 버전이있는 일대 다 관계가 있습니다.Doctrine oneToMany - 하나를 쿼리하는 중
**page**
id
parent_id
**page_version**
id
page_id
title
published
date
이는 외래 키 page_id와 관련이 있습니다.
class PageVersion
{
/**
* @var page
*
* @ORM\ManyToOne(targetEntity="Page", inversedBy="pageversions")
*
*/
private $page;
}
그래서 나는 각 페이지에 대한 모든 페이지 버전을 얻을 수 있습니다 : 그래서 나는 페이지 실체와 PageVersion 엔티티가 있습니다. 그러나 각 페이지에는 하나의 게시 된 페이지 버전 만 있습니다. 따라서 최신 버전을 얻으려면 어떻게해야합니까? 예. 모든 버전의 목록을 가져 오는 대신 발행 된 버전 = '1'입니까? 여기 내 쿼리의 예입니다class Page { /** * @ORM\OneToMany(targetEntity="PageVersion", mappedBy="page") */ private $pageversions; }
public function findAllPages()
{
$query = $this->getEntityManager()
->createQuery('
SELECT DISTINCT p,v
FROM XYZWebsiteBundle:Page p
JOIN p.pageversions v
WHERE v.published = :published
AND v.deleted = :deleted'
)->setParameters(array('published' => 1, 'deleted' => 0));
try {
return $query->getResult();
} catch (\Doctrine\ORM\NoResultException $e) {
return null;
}
}
그러나 만약 내가에만 페이지 속성이 아니라 PageVersion 속성 예를 들어 제목, 출판, 날짜 등
에 액세스 할 수있는 결과를 통해 I 루프$entities = $em->getRepository('XYZWebsiteBundle:Page')->findAllPages();
foreach($entities as $entity){
print($entity->getPageVersion()->getTitle());
}
반환 된 오류는 치명적 오류입니다. 정의되지 않은 메서드 Doctrine \ ORM \ PersistentCollection :: getTitle()을 호출하십시오. 게시 된 상태로 더 이상 한 페이지가 없을 것 확실하다면
감사합니다. 그걸 시도했지만 다음과 같은 오류가 발생했습니다. [의미 상 오류] '게시 된 ='근처에 줄 0, 열 54 : 오류 : 클래스 XYZ \ WebsiteBundle \ Entity \ 페이지에 게시 된 필드 또는 연결이 없습니다. FYI 게시 된 필드는입니다. 페이지가 아닌 page_version 내에서 어떻게 이것을 쿼리에서 참조 할 수 있습니까? – user1961082
새 쿼리로 내 대답을 편집했습니다. – banban
감사합니다. 더 많은 정보를 제공하기 위해 관리 사용자가 추가/편집/삭제할 수있는 CMS의 페이지 목록이 있습니다. 모든 페이지를 나열하고자하는 listAction이있는 경우 단순히 모든 페이지를 가져 오기 위해 쿼리를 실행합니다 엔티티 (이 시점에서 버전에 대해 중요하지 않으므로) 편집 페이지에서 편집하려는 경우 두 번째 쿼리를 실행하여 최신 버전 (게시 된 버전 = 1)을 얻으시겠습니까? 그러면 최신 버전 데이터를 가져 와서 편집 할 수 있습니다. – user1961082