TL; DR在創建/保存與某個頁面相關的版本化DataObject時,會在相應的版本表(而不是一個)中創建兩個條目。SilverStripe GridField:創建的DataObject太多版本
我想版本的一些數據對象,並已應用在版本擴展如下:
class Testobject extends DataObject {
static $has_one = array(
'Page' => 'Page'
);
static $extensions = array(
"Versioned('Stage', 'Live')",
);
Testobjects在一個GridField所管理的一些頁面上,像這樣:
class PageContent extends Page {
public static $has_many = array(
"Testobjects" => "TestObject"
);
public function getCMSFields() {
$fields = parent::getCMSFields();
$config = GridFieldConfig_RelationEditor::create();
$gridField = new GridField(
'Testobjects',
'Testobject',
$this->Testobjects(),
$config);
$fields->addFieldToTab('Root.Main', $gridField);
}
現在,每當我在GridField的EditForm中添加或保存一些TestObject,兩個新條目出現在TestObject_versions表中。爲了進行比較,當我在SiteTree中保存頁面時,僅創建了一個條目在相應的版本表中創建。
因爲我們會在一個頁面上看到數以千計的這些DataObjects,所以我很擔心這種重複填充我的數據庫。有沒有辦法解決這個問題?
進一步認可:
在創建新的TestObject,在版本表中的第一項有它的PAGEID字段設置爲0,第二個條目設置相應頁面的實際PAGEID 。
如果我通過
Testobject::get()
在GridField建設替代$this->Testobjects()
,只有一個條目版本表顯示出來。onBeforeWrite使用
$this->Testobjects()
時叫了兩聲如此看來設置相對於頁面中的第一「寫()」,然後又「寫()」調用後發生。但是在代碼中這是否會發生?
我是一個的ModelAdmin裏面,但想你的解決方案呢(設置固定PAGEID作爲HiddenField的值現在),但不幸的是,沒」幫助 – schellmax 2013-03-27 08:21:01