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

Laravel 5.4 delete table row and rows from related table

当我从组 table 中删除一行时,我希望该函数也删除 table group_user 中的所有关系映射。例如,如果我删除 ID 为 4 的组,则 group_user table 中具有 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();
        });

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

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

如果您的 table 存储引擎类型是 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');
    });