2016-08-15 1 views
2

Ich habe eine Erweiterung, die die onAfterWrite Methode der Eltern erweitert.SilverStripe Prüfen, ob der Datensatz bearbeitet oder hinzugefügt wird?

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

    $newTask = new Mytask($this->owner->ID); 
    $newTask->copyTask(); 
} 
?> 

Problem:

Ich möchte Klasse instanziiert MyTask und seine Methode nur aufrufen, wenn neue Datensatz hinzugefügt wird, nicht, wenn die vorhandenen Datensatz in Bearbeitung. Wie kann überprüft werden, ob wir gerade einen bestehenden Datensatz bearbeitet oder einen neuen Datensatz in der Methode onAfterWrite hinzugefügt haben?

Dank

Antwort

6

Ich glaube, dass auf der anfänglichen Schreib es keinen ID Satz gegen das Objekt sein (zumindest nicht während der onBeforeWrite).

Sie können dies zu Ihrem Vorteil verwenden, indem Sie entweder während des onBeforeWrite eine Markierung für das Objekt (z. B. $this->isFirstWrite = true) setzen und dann darauf prüfen onAfterWrite.

UPDATE: Wie Barry richtig gesagt hat, gibt es eine Funktion namens isInDB, die nur prüft, ob es eine ID gibt - mit der Sie sich in Zukunft schützen können, wenn wir nicht mehr explizit auf die ID als Indikator setzen ob es in der DB ist.

5

Ich würde vorschlagen $this->IsInDB() es gibt "True, wenn das Objekt in der Datenbank ist" zurück. Link zu api. Dies überprüft, ob es eine ID gibt, tut dies aber in einer schönen, gut benannten Funktion, um klar zu machen, was vor sich geht.

+0

Sehr wahr - Ich habe meinen Beitrag aktualisiert –

Verwandte Themen