Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

General Questions

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

Remove Asset when a dataobject is deleted


Reply

2 Posts   666 Views

Avatar
BenWu

16 May 2012 at 1:26am Community Member, 90 Posts

Hello

I have got a class called project

class project extends DataObject {

static $has_one = array {
'aFile' =>'MyFile'
}

public onBeforeDelete(){
parent::onBeforeDelete();
$this->aFile()->delete();
}
}

An the MyFile class is

MyFile extends File{

public onBeforeDelete(){
//do something
parent::OnBeforeDelete()
}

}

Problem:
When I delete a Project within the ModelAdmin, I got this error:

There has been an error

and I am not sure where to go from here. I check the log file and I got

[15-May-2012 02:03:15] Notice at d line d: d (/admin/projects/Project/3/EditForm?action_doDelete=Delete)
[15-May-2012 02:03:15] Error at sapphire/core/model/DataObject.php line 1126: Uncaught Exception: DataObject::delete() called on a DataObject without an ID

Avatar
BenWu

16 May 2012 at 1:39am Community Member, 90 Posts

Let me answer myself:

When you use the relation-getter, you got a ComponentSet. The delete method for it doesn't work

Here is what i have to do in the OnbeforeDelete() function of the Project class

public function OnBeforeDelete(){
$myFile = $this->aFile();
$file = DataObject::get_by_id('MyFile', $myFile->ID); //we have to make sure it is a Dataobject object
$file->delete();
$file->destroy();
return parent::OnBeforeDelete();
}