Laravel onDelete级联多对多关系

时间:2018-01-19 15:18:35

标签: php mysql laravel migration

假设我们有表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从一个表切换到另一个表)?

编辑:在删除功能中添加一行根据id或具有Observer的其他记录是我正在考虑尝试探索实现它的其他可能方法的两种解决方案

1 个答案:

答案 0 :(得分:2)

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

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