我有一个简单的关系模型,我已经建立了这样的模型: 家长:
<?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();
}
}
第一个儿童画廊
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();
}
}
所以基本上没什么大不了的:一个公寓有一个画廊,一个画廊有很多图像。 它工作得很好,问题是当我删除一个appartement时,我想删除图库和与appartement相关的图像。
所以我试图覆盖删除方法。 公寓被删除,以及图库,但图像不会被删除,似乎没有访问Gallery的删除功能,因为我已经尝试添加模具;在功能,但它永远不会死。
有谁知道如何克服这个问题? 感谢
答案 0 :(得分:0)
您有2个选项,第一个是设置外键约束并使用迁移进行删除级联
// 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');
});
另一种选择是使用model observers 这是一个示例:http://www.laravel-tricks.com/tricks/cascading-deletes-with-model-events这对不支持FK约束的数据库非常有用。