我有一个简单的关系模型,我已经建立了这样:父:
<?php
class Appartement extends Eloquent {
public function gallery()
{
return $this->hasOne('Gallery', 'object_id')->where('type', '=', 'appartement');
}
public function delete()
{
$this->gallery()->delete();
return parent::delete();
}
}
First children Gallery
class Gallery extends Eloquent {
protected $fillable = [];
public function images()
{
return $this->hasMany('GalleryImage');
}
public function delete()
{
$this->images()->delete();
return parent::delete();
}
}
第二儿童影集
class GalleryImage extends Eloquent {
protected $fillable = [];
public function gallery()
{
return $this->belongsTo('Gallery');
}
public function delete()
{
unlink(public_path().$this->link);
return parent::delete();
}
}
所以基本上没什么大不了的:一间公寓有一个画廊,一个画廊有很多图片。它工作得很好,问题是当我删除一个公寓时,我想要删除与公寓相关的画廊和图像。
所以我尝试重写delete方法。公寓被删除了,画廊也被删除了,但是图片没有被删除,而且画廊的删除功能似乎无法访问,因为我尝试添加了一个骰子;在函数中,但它永远不会消失。
有谁知道我该如何克服这个吗?由于
您有两个选择,第一个是设置外键约束并使用您的迁移级联删除
// gallery migration
DB::table('galleries', function($table){
$table->foreign('object_id')
->references('id')->on('appartments')
->onDelete('cascade');
});
// images migration
DB::table('images', function($table){
$table->foreign('gallery_id')
->references('id')->on('galleries')
->onDelete('cascade');
});
另一个选择是使用模型观察者下面是一个例子:http://www.laravel-tricks.com/tricks/cascading-deletes-with-model-events这对于不支持FK约束的数据库非常有用。