SilverStripe检查是否正在编辑或添加记录?

Wat*_*ame 3 silverstripe

我有一个扩展,扩展onAfterWrite了父母的方法.

<?php
public function onAfterWrite(){
   parent::onAfterWrite();

   $newTask = new Mytask($this->owner->ID);
   $newTask->copyTask();
}
?>
Run Code Online (Sandbox Code Playgroud)

问题:

我想实例化类 MyTask并仅在添加新记录时调用其方法,而不是在编辑现有记录时.如何检查我们是否只编辑了现有记录或在方法中添加了新记录onAfterWrite

谢谢

Dan*_*sby 6

我相信在初始写入时ID,对象不会有任何设置(至少在此期间不会onBeforeWrite).

(例如,您可以通过在对象上设置标志,用你的优势$this->isFirstWrite = true在)onBeforeWrite,然后检查它onAfterWrite.

更新:正如Barry正确地说的那样,有一个叫做isInDB你可以使用的函数,它只是检查是否有一个ID - 如果我们不再明确地依赖ID来指示它是否在D B.


Bar*_*rry 6

我建议$this->IsInDB()它返回"如果对象在数据库中则为True".链接到api.这会检查是否有ID,但是在一个很好的命名函数中这样做可以清楚地说明发生了什么.