我正在创建一个 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 表中?每个页面的位置不会根据页面的版本而改变。这只会在所有页面的列表视图中更改。例如,如果您有“关于我们”页面的 5 个子页面,则可以订购这些页面以在前端呈现输出。
- rewrite_rules 表应该加入 page 表还是 page_version 表?同样,这将链接到页面而不是版本。如果有人编辑页面的某个版本并添加了重写规则,这将应用于该页面,而不仅仅是该页面的版本。即,如果您要恢复到旧版本,重写规则仍将适用于该版本。
要使页面版本成为活动页面,这应该是页表中的简单字段还是 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;
}