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   733 Views

Avatar
BenWu

Community Member, 91 Posts

16 May 2012 at 1:26am

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

Community Member, 91 Posts

16 May 2012 at 1:39am

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();
}