Laravel 5.4 从相关表中删除表行和行

Posted

技术标签:

【中文标题】Laravel 5.4 从相关表中删除表行和行【英文标题】:Laravel 5.4 delete table row and rows from related table 【发布时间】:2017-06-07 21:20:43 【问题描述】:

当我从组表中删除一行时,我希望该函数也从表 group_user 中删除所有关系映射。例如,如果我删除 id 为 4 的组,则 group_user 表中 group_id 为 4 的所有行也将被删除。下表:

 Schema::create('users', function (Blueprint $table) 
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->string('phone');
            $table->boolean('approved')->default(false);
            $table->rememberToken();
            $table->timestamps();
        );
 Schema::create('groups', function (Blueprint $table) 
            $table->increments('id');
            $table->string('name');
            $table->integer('course_id');
            $table->timestamp('start_date')->nullable();
            $table->timestamp('end_date')->nullable();
            $table->timestamps();
        );
  Schema::create('group_user', function (Blueprint $table) 
            $table->increments('id');
            $table->integer('user_id');
            $table->integer('group_id');
            $table->timestamps();
        );

目前在组控制器中使用此功能,但它只从组表中删除:

function deleteGroup($id)
		$group = Group::find($id);
		$group->delete();
		return redirect()->back();
	

【问题讨论】:

我想你想要一些定义,比如:$table->foreign('user_id')->references('id')->on('gropu')->onDelete('cascade'); @mkaatman 抱歉,我没有看到您的评论;)我认为您的评论是正确的解决方案。 【参考方案1】:

如果您的表存储引擎类型是 innodb,您可以尝试在迁移中设置正确的关系,所有这些都将在数据库层完成。

Schema::create('group_user', function (Blueprint $table) 
        $table->increments('id');
        $table->integer('user_id');
        $table->integer('group_id');
        $table->timestamps();

        $table->foreign('user_id')
                ->references('id')
                ->on('users'))
                ->onDelete('cascade');
        $table->foreign('user_id')
                ->references('id')
                ->on('users'))
                ->onDelete('cascade');
    );

【讨论】:

InnoDB 是数据库管理系统(mysql、MariaDB)的存储引擎,但如果我没记错的话,laravel 默认使用 innoDB 进行迁移。

以上是关于Laravel 5.4 从相关表中删除表行和行的主要内容,如果未能解决你的问题,请参考以下文章

从 laravel 5.4 中删除 public

如何在laravel 5.4中强制删除

从 url laravel 5.4 中删除公共

在 laravel 5.4 中检索软删除的用户帖子

在数据透视表 laravel 中删除行和插入行

SQL删除不在另一个表中的行