2016-05-26 10 views
1

私のシーダーにとって、テーブルを切り捨てることができるようにしたいのですが、残念ながら外部キーによってバインドされているものもあります。laravel内のソフト削除を無効にするには

ソフト削除に基づいてテーブルを切り捨てることができないようにするために、私は単にforeach Model :: all()がそのモデルを削除していると言っています。おそらくもっと良い方法がありますか?ただし、ソフト削除が実行されているテーブルでは、実際にレコードを削除していません。本当にレコードを削除したいときにソフト削除を回避するにはどうすればよいですか?

class DatabaseSeeder extends Seeder 
{ 
    /** 
    * Run the database seeds. 
    * 
    * @return void 
    */ 
    public function run() 
    { 
     Model::unguard(); 

     // Disable foreign key check for this connection before running seeders 
     DB::statement('SET FOREIGN_KEY_CHECKS=0;'); 

     $this->call(UserTableSeeder::class); 

     // Enable foreign check after seeding. 
     DB::statement('SET FOREIGN_KEY_CHECKS=1;'); 

     Model::reguard(); 
    } 
} 

、代わりに$model->delete()のソフト削除モデルの使用$model->forceDelete()を削除強制的に:

答えて

3

あなたが必要とする方法

Model::where('condition')->where('may be other condition')->forceDelete(); 

または特定のモデルインスタンス上forceDelete

$modelInstance = Model::find($id); 
$modelInstance->forceDelete(); 
1

はあなたDatabaseSeeder.phpに外国チェックし、モデルガードを無効にする文を設定します。ここで

1

は私が通常何をすべきかです:私の移行ファイルで

public function run() { 
    DB::statement('SET FOREIGN_KEY_CHECKS=0;'); 
    DB::table('users')->truncate(); 

    // Create the table structure 

    DB::statement('SET FOREIGN_KEY_CHECKS=0;'); 

    } 

これは、外部キー制約を無視して、ドロップテーブルを強制基本的にあります。

関連する問題