laravel-ondelete级联多对多关系

9ceoxa92  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(318)

假设我们有表a、b和c(相应地有它们的时间戳)

Table ZZ
id
some_fieldZ

Table YY
id
some_fieldY

Table XX
id
b_id
a_id
some_fieldX

Schema::table('XX', function (Blueprint $table) {
    $table->foreign('ZZ')->references('id')->on('ZZ')->onDelete('cascade');
    $table->foreign('YY')->references('id')->on('YY')->onDelete('cascade');
});

当yy或zz中的记录被删除时,xx是否可以相应地删除(也可能是yy/zz),而不改变其结构(将fk从一个表切换到另一个表)?
编辑:在delete函数中添加一行,根据id删除另一条记录,或者有一个观察者,这是两个解决方案,我只是想探索其他可能的方法来实现它

f45qwnt8

f45qwnt81#

这是一个没有在模式中处理它的解决方案,但是在模型中使用引导函数[这不会改变任何结构,不需要迁移更新]:确保在父模型中有关系:

public function XXs()
{
    return $this->hasMany(Path\to\XX::class, 'id', 'id');
}

然后在父模型中插入触发器(我假设:yy和/或zz)

protected static function boot()
    {
        parent::boot();

        static::deleting(function ($model) {
            //Delete XXs first
            $model->XXs()->delete();
        });
    }

相关问题