我有一对多的关系,其中一页有多个版本。
**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;
}
所以我可以获得每个页面的所有页面版本。但是,每个页面都只会有一个已发布的页面版本。因此,在查询时如何获取最新版本?即 Where published = '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;
}
}
但是,如果我遍历结果,我只能访问 Page 属性而不是 PageVersion 属性,例如标题、发布、日期等。
$entities = $em->getRepository('XYZWebsiteBundle:Page')->findAllPages();
foreach($entities as $entity){
print($entity->getPageVersion()->getTitle());
}
返回的错误是致命错误:调用未定义的方法 Doctrine\ORM\PersistentCollection::getTitle()。