我正在创建一个CMS,我们网站的所有页面都可以添加/更新/删除/重新定位等。我在页面和page_versions之间创建了一个oneToMany关系,所以每次在CMS中修改页面时,副本都会保存为page_version,以便我们可以根据需要恢复到此版本。此外,当有人正在编辑页面时,它将被锁定,因此其他用户无法同时编辑它。每个页面也可以有一个父页面,每个页面可以使用与rewrite_rules表的另一个oneToMany关系具有多个重写规则。但是,在使用Symfony2和Doctrine实体关系进行映射时,我不确定应该使用哪些表以及如何将它们用作对象。以下是我的表格:
page table
id
parent_id
locked
page_version table
page_id
title
content
enabled
position
rewrite_rules table
id
page_id
rewrite
canonical
我的问题是:
要使页面版本成为活动页面,这应该是页面表格中还是page_version表格中的简单字段?
由于
更新
以下是我的Page和PageVersion类:
class Page { /** * @ORM\OneToMany(targetEntity="PageVersion", mappedBy="page") */ private $pageversions; }
class PageVersion
{
/**
* @var page
*
* @ORM\ManyToOne(targetEntity="Page", inversedBy="pageversions")
*
*/
private $page;
}
答案 0 :(得分:1)
考虑到版本控制关联从长远来看变得非常烦人。此外,您应该删除OneToMany
关系并仅保留ManyToOne
方面的关系。
这样可以更轻松地使用像EntityAudit这样的工具对数据进行版本控制,遗憾的是,这种工具在我的情况下不起作用(不支持继承)。
所以我的建议是: