php Laravel中的级联删除[重复]

gab6jxml  于 2023-06-28  发布在  PHP
关注(0)|答案(3)|浏览(114)

此问题已在此处有答案

Automatically deleting related rows in Laravel (Eloquent ORM)(18回答)
昨天关门了。
我有一个级联删除的例子,但它看起来太大和复杂,有没有办法缩短这段代码?

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

        static::deleted(function ($parent) {
            // $versions = $parent->game_versions();
            $versions = $parent->game_versions;
            foreach($versions as $version){
                $version->delete();
            }
        });
    }

有人能帮我吗?

pn9klfpd

pn9klfpd1#

你好,你可以使用CASCADE DELETE,你可以修改你的迁移中的外键约束,创建game_versions表,以包含值为“cascade”的onDelete方法,如下所示:

Schema::create('game_versions', function (Blueprint $table) {
    $table->id();
    $table->unsignedBigInteger('game_id');
    $table->foreign('game_id')->references('id')->on('games')->onDelete('cascade');
    $table->string('version_number');
    $table->timestamps();
});

这将确保当删除游戏记录时,具有相应game_id的所有相关GameVersion记录也将从数据库中删除。

du7egjpx

du7egjpx2#

例如,以下代码将在删除游戏时擦除所有游戏版本:

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

    static::deleted(function ($parent) {
        $parent->game_versions()->delete();
    });
}
mwg9r5ms

mwg9r5ms3#

你可以把foreach简化成这样。

foreach($versions as $version as $v)->delete()

相关问题