我有一个Product
$has_many
的DataObject ProductPages
。 MyObject()->getComponents('SomePages')
会返回与我的Product
对象关联的所有实时网页。
我需要知道附加到此对象的所有页面(草稿和已发布),因为我想处理从GridField内联编辑中取消/发布它们(以及更改其他页面属性,如URL和标题)。 / p>
我设法通过以下方式获取所有草稿ProductPage
:
$gridfieldList = Versioned::get_by_stage('ProductPage', 'Stage')
->filter(array(
"ProductID" => $this->ID
));
这将返回Product Pages的DataList,但不知道我关联的Product上下文,这意味着当我尝试单击Save时,没有任何反应。
如果我使用$this->getComponents('ProductPages')
填充GridField,则所有更改都会在表单提交时正确保存,但如果我尝试取消发布页面,则会删除"删除"来自我的GridField。
所以我的问题基本上是,我可以采取哪种方法让对象的相关页面填充我的GridField,同时仍然知道它们的上下文(即成功保存了更改)?
值得注意的是我在这个网站上运行SS 3.1.5 = /
答案 0 :(得分:1)
Phew,3.1.5已经过时了,我只是在3.1.12中查找并发现了一些有用的东西。
问题是,Versioned
DataExtension会自动修改SQL查询以过滤当前阶段。并且任何页面都可以具有不同的状态,因此可以存在于不同的数据库表中。幸运的是Versioned可以检查DataQuery参数,所以这样的东西可能对你有所帮助:
$this->MyRelation()
->setDataQueryParam('Versioned.mode', 'all_versions');