• 注册
  • laravel技术 laravel技术 关注:1 内容:5

    Laravel 软删除模型指南

  • 查看作者
  • 打赏作者
  • 当前位置: 小同php论坛 > laravel框架 > laravel技术 > 正文
    • laravel技术
    • 应用程序中用户犯错并意外删除数据是很常见的,即使在他们删除数据之前向他们显示了数次警告。此时需要引入数据恢复的功能,以便于在删除后恢复,并在一定时间后永久删除该数据。
      
      软删除
      如果希望在用户删除其账户后保留一段时间,以便于恢复它。需要创建一个新的迁移文件向 User 模型添加软删除。
      
      /**
      * Run the migrations.
      *
      * @return void
      */
      public function up()
      {
          Schema::table('users', function (Blueprint $table) {
              $table->softDeletes();
          });
      }
      添加 trait:SoftDeletes
      class User extends Authenticatable
      {
          use HasApiTokens, HasFactory, Notifiable, SoftDeletes;
          // ...
      }
      到此,软删除已经正常工作了。当用户删除账户时,应用程序不会直接删除该记录,而只是设置删除时间。
      永久删除用户和恢复用户的方法参考软删除文档
      
      定时清理数据
      如果想要定期清理数据库并自动删除软删除模型,这称为 修剪。与在 Laravel 中向模型添加软删除类似,可以使用 Prunable 特性和在模型中实现 prunable 方法,该方法告诉 Laravel 何时删除软删除模型。
      
      添加 trait:Prunable
      class User extends Authenticatable
      {
          use HasApiTokens, HasFactory, Notifiable, SoftDeletes, Prunable;
          // ...
      }
      这个 trait 告诉 Laravel,当调度程序运行时,它应该在这个模型中寻找 prunable 方法
      
      一个好的做法是一周后删除用户,这样即使您的支持队列已满,您也可以选择恢复它们,同时也给他们一个合理的时间,知道他们的数据从系统中擦除。
      
      添加 prunable 方法
      public function prunable()
      {
        return static::where('deleted_at', '<=', now()->subWeek());
      }
      设置完成后,可以通过将命令添加到控制台内核来安排命令每天修剪模型:
      
      $schedule->command('model:prune')->daily();

      请登录之后再进行评论

      登录

      广告位预留

    • 实时动态
    • 偏好设置
    • 帖子间隔 侧栏位置: