2017-06-07 104 views
0

當我從組表中刪除一行時,我想要該函數也從表group_user中刪除所有關係映射。例如,如果我刪除了id爲4的組,group_user表中group_user表中的所有行也會被刪除。如下表:Laravel 5.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){ 
 
\t \t $group = Group::find($id); 
 
\t \t $group->delete(); 
 
\t \t return redirect()->back(); 
 
\t }

+1

我想你想的一些定義,如:'$表 - >外國( 'USER_ID') - 上( 'gropu')> - - >引用( '身份證')> onDelete( '串聯'); ' – mkaatman

+0

@mkaatman抱歉,我沒有看到您的評論;)我認爲您的評論是正確的解決方案。 –

回答

1

如果你的表存儲引擎type是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'); 
    }); 
+0

我的數據庫是mariadb,它還能工作嗎?謝謝 – Benua

+0

InnoDB是一個數據庫管理系統(MySQL,MariaDB)的存儲引擎,但如果我沒有錯誤的laravel默認使用innoDB進行遷移。 –