如何覆盖laravel中的软删除

时间:2016-05-26 22:26:41

标签: laravel

对于我的播种机,我希望能够截断我的表,不幸的是有一些外键绑定,另外还有一些启用了软删除。

为了解决基于软删除而无法截断表的问题,我只是简单地说foreach Model :: all()删除该模型..也许有更好的方法?但是对于具有软删除的表,它实际上并不删除记录。当我真的想删除记录时,如何绕过软删除?

3 个答案:

答案 0 :(得分:5)

您需要Model::where('condition')->where('may be other condition')->forceDelete(); 方法

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

或特定模型实例:

android:background="@android:color/transparent"

答案 1 :(得分:1)

设置声明以禁用DatabaseSeeder.php上的外国检查和模特防护:

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->forceDelete()代替$model->delete()

答案 2 :(得分: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;');

  }

这基本上是强制丢弃表忽略外键约束。