1 つのページに多くのバージョンがある 1 対多の関係があります。
**page**
id
parent_id
**page_version**
id
page_id
title
published
date
これらは、外部キー page_id によって関連付けられています。したがって、Page エンティティと PageVersion エンティティがあります。
class Page { /** * @ORM\OneToMany(targetEntity="PageVersion", mappedBy="page") */ private $pageversions; }
class PageVersion
{
/**
* @var page
*
* @ORM\ManyToOne(targetEntity="Page", inversedBy="pageversions")
*
*/
private $page;
}
したがって、各ページのすべてのページ バージョンを取得できます。ただし、各ページには、公開されたページ バージョンが 1 つしかありません。したがって、クエリを実行するときに、最新バージョンを取得するにはどうすればよいですか? つまり、すべてのバージョンのリストを取得するのではなく、公開場所 = '1' ですか?
これが私のクエリの例です:
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 プロパティにはアクセスできません。
$entities = $em->getRepository('XYZWebsiteBundle:Page')->findAllPages();
foreach($entities as $entity){
print($entity->getPageVersion()->getTitle());
}
返されるエラーは Fatal error: Call to undefined method Doctrine\ORM\PersistentCollection::getTitle() です。