【问题标题】:Silverstripe 3.1 - onBefore/After Delete/Write doesn't workSilverstripe 3.1 - onBefore/After Delete/Write 不起作用
【发布时间】:2014-07-05 22:32:38
【问题描述】:

我正在尝试在 onAfterWrite 或 before 或 onBeforeDelete 上执行一个简单的写入命令。但它根本不起作用。

Object1 -> 这里我要执行代码。与 Object2 有 $has_one 关系(Item)

public function onAfterWrite(){
    parent::onAfterWrite();

    $item = Object2::get()->byID($this->ItemID);
    $item->Title = 'test123';
    $item->write();
}

onAfter/Before 函数彼此存在相同的问题。 如果没有错误,或者别的什么。

错在哪里?

【问题讨论】:

  • 我们可以看看你是如何定义你的 2 关系的吗?另外,你到底想用这个实现什么?
  • 如果您的关系被定义为Item => Object2,那么获取Object2 的一种简单方法是$item = $this->Item()
  • 问题是我在 Object1 上使用了内联网格。因此,如果您编辑 smthg.在内联网格中,第一次保存不保存 object1。如果你第二次点击保存按钮,它就会起作用..

标签: silverstripe


【解决方案1】:

如果我对您的理解正确,您希望获取和操作通过 has_one 关系与您的 Object1 记录相关的 Object2 记录。假设您已经像这样在 Object2 中声明了您的关系:

class Object2 extends DataObject{
  private static $has_one = array(
    'Object1' => 'Object1'
  );
  ...

您在 Object1 中的 onAfterWrite 代码应如下所示

public function onAfterWrite(){
    parent::onAfterWrite();
    // use the find() method to look up the relation
    $item = Object2::get()->find('Object1ID', $this->ItemID);
    // check that the related item exists before editing
    if($item){
      $item->Title = 'test123';
      $item->write();
    }
}

【讨论】:

  • 这并不能解决我的问题,但它解决了这个问题 ;) 我发现我在 object1 上使用的内联网格会产生一些问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 2018-07-19
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
  • 2013-03-02
相关资源
最近更新 更多