【问题标题】:How do I override soft deletes within laravel如何在 laravel 中覆盖软删除
【发布时间】:2016-09-25 02:50:12
【问题描述】:

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

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

【问题讨论】:

    标签: laravel


    【解决方案1】:

    你需要forceDelete方法

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

    或在特定模型实例上:

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

    【讨论】:

      【解决方案2】:

      在您的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()

      【讨论】:

        【解决方案3】:

        这是我通常做的:

        在我的迁移文件中,

        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;');
        
          }
        

        这基本上是忽略外键约束的强制删除表。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-11-02
          • 2023-03-26
          • 1970-01-01
          • 1970-01-01
          • 2016-03-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多