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');
});
当我从组 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');
});