三个模型之间的关系删除



我有一个简单的关系模型,我已经建立了这样:父:

    <?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约束的数据库非常有用。

最新更新