Я создаю CMS, в которой все страницы нашего веб-сайта могут быть добавлены/обновлены/удалены/перемещены и т. д. Я создаю отношение oneToMany между страницами и page_versions, поэтому каждый раз, когда страница изменяется в CMS, копия будет сохраняться как page_version, чтобы мы могли вернуться к этой версии, если это необходимо. Кроме того, когда кто-то в данный момент редактирует страницу, она блокируется, поэтому другие пользователи не могут редактировать ее одновременно. Каждая страница также может иметь родительскую страницу, и каждая страница может иметь несколько правил перезаписи, используя другую связь oneToMany с таблицей rewrite_rules. Однако есть несколько полей, в которых я не уверен, в какой таблице они должны находиться и как их можно использовать в качестве объектов при сопоставлении с использованием отношений сущностей 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
Мои вопросы:
- Должно ли поле position находиться в таблице страниц или таблице page_version? Позиция для каждой страницы не будет меняться в зависимости от версии страницы. Это будет изменено только в представлении списка всех страниц. Это связано с тем, что если у вас есть, например, 5 дочерних страниц страницы «О нас», их можно заказать для вывода вывода в интерфейсе.
- Должна ли таблица rewrite_rules присоединяться к таблице страниц или таблице 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;
}