2014-07-04 2 views
1

onAfterWrite 또는 before 또는 onBeforeDelete에 간단한 쓰기 명령을 실행하려고합니다. 그러나 그것은 단순히 작동하지 않습니다.Silverstripe 3.1 - onBefore/After 삭제/쓰기가 작동하지 않습니다.

Object1 -> 여기 코드를 실행하고 싶습니다. 기능하기 전에 서로 onAfter에서 Object2

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

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

같은 문제에 $의 has_one 관계 (항목)/가지고 있습니다. 오류가 없으면 그 밖의 것이 없습니다.

어디에서 실수 할 수 있습니까?

+0

과 같아야합니다 : 당신은이 같은 Object2의 관계를 선언 한 가정하면? 또한, 정확히 이것을 달성하려는 것은 무엇입니까? – colymba

+0

그리고 당신의 관계가'Item => Object2'로 정의 된 경우 Object2를 얻는 쉬운 방법은'$ item = $ this-> Item()'입니다. – colymba

+0

문제는 제가 Object1에 인라인 그리드를 사용하고 있다는 것이 었습니다. 그래서 만약 당신이 smthg을 편집하는 것 같습니다. 인라인 그리드에서 첫 번째 저장은 object1을 저장하지 않습니다. 두 번째로 저장 단추를 클릭하면 작동합니다 .. – invictus

답변

1

정확하게 이해하고 있다면 Object1 레코드와 관련이있는 Object2 레코드를 가져와 조작하고 싶습니다. 우리는 당신이 당신이 개 관계를 정의하는 방법을 볼 수

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

는 오브젝트 1에 대한 여러분의 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(); 
    } 
} 
+0

내 문제는 해결되지 않지만이 질문은 해결됩니다.) object1에서 사용중인 인라인 눈금이 문제를 일으킨다는 것을 알게되었습니다. – invictus

관련 문제