我有一个事件的getCMSField_forpopup表单。我在其中制作了另一个弹出窗口,为该事件提供多个日期(使用has_many关系)。当我向事件“A”提供日期2不同的日期/时间,然后在保存事件“A”之后,我打开主getCMSField_forpopup以输入另一个事件“B”的详细信息然后我看到已经存在的日期/时间(complextablefield)意图出现在事件A的细节中而不是在事件“B”中。我希望看到的只有A而不是每一个新事件。我怎样才能做到这一点?
答案 0 :(得分:0)
您的问题是您为1个活动输入日期,但是您可以在每个活动中看到此日期?
对我来说,这听起来好像你的事件目前没有身份证,因此对日期“WHERE EventID = x”的查询不起作用,或者您的日期在没有事件ID的情况下保存
如果您的日期具有事件集的ID,则可以简单地检查您的数据库。
如果事件的ID是0,那么问题是你没有保存事件ID,这意味着:
如果这不是问题,那么问题是当你创建一个新的事件时它没有ID,因此不能按ID过滤,你只需在事件的getCMSFields_forPopup中执行此操作: / p>
if (!$this->isNew()) {
// add your ComplexTableField for Dates here so it only
// gets added if this record has already been saved
}
但实际上我建议使用嵌套的DataObjectManager(DataObjectManager中的DataObjectManager)(请参阅youtube上的教程:http://youtu.be/eeXOTlXFmQQ),DataObjectManager会为您完成所有工作,因此不应出现此问题。登记/> 如果您已经保存了一次事件,它只显示日期的DataObjectManager,否则它会告诉用户他需要先保存它。 它还会为您设置日期的事件ID
或者,更好的是,您可以升级到SilverStripe 3,在那里您可以使用GridField。 GridField的工作方式比DataObjectManager更好,看起来更好。