0

我有一个像这样构建的简单关系模型: Parent :

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


        }
    }

所以基本上没什么大不了的:一个公寓有一个画廊,一个画廊有很多图像。它工作得很好,问题是当我删除一个公寓时,我想删除与该公寓关联的画廊和图像。

所以我试图覆盖删除方法。公寓被删除,还有画廊,但是图片没有被删除,而且似乎无法使用画廊的删除功能,因为我试图添加一个模具;在函数中,但它永远不会死。

有谁知道我怎么能克服这个?谢谢

4

1 回答 1

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

另一种选择是使用模型观察者 ,这里是一个例子:http ://www.laravel-tricks.com/tricks/cascading-deletes-with-model-events这对不支持 FK 约束的数据库很有用。

于 2014-03-23T20:48:14.620 回答