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.

We've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

General Questions /

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

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

Remove Asset when a dataobject is deleted


Go to End


2 Posts   2220 Views

Avatar
BenWu

Community Member, 97 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, 97 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();
}