使用 Quicksand 轻松删除旧的软删除记录

发布时间 作者

Easily deleting old soft-deleted records with Quicksand image

在构建应用程序时,有时您希望允许用户从他们的视图中删除数据,但将记录保留在数据库中。例如,可以允许用户删除他们的帐户,但您希望给他们机会以后重新启动帐户。如果所有数据都被完全删除,那么他们将不得不从头开始。

Laravel 的 Eloquent 提供了开箱即用的这种功能,当模型被软删除时,它们不会从数据库中删除。相反,会存储一个 deleted_at 属性。数据库记录仍然存在,Eloquent 会忽略它,除非通过 withTrashed 属性明确告知。

这方面的一个问题是,随着时间的推移,您的软删除记录会填满您的数据库并占用大量空间。

Tighten Co. 最近发布了一个名为 **“Quicksand”** 的新包,它将通过自动执行和调度旧的软删除记录的删除来帮助您解决这个问题。

**Quicksand** 是一个 Artisan 命令,您可以通过 Laravel 计划程序运行它,以强制删除您的软删除记录。您可以指定要清理的类、记录应该保留多长时间,它会完成剩下的工作。让我们来看看这个包。

安装

首先,通过 Composer 安装 **Quicksand**

composer require tightenco/quicksand

然后在 **config/app.php** 中添加 Quicksand 服务提供者

'providers' => [
...
Tightenco\Quicksand\QuicksandServiceProvider::class,

之后,您应该发布 Quicksand 配置以根据需要进行编辑,在您的终端中运行以下命令

php artisan vendor:publish --provider="Tightenco\Quicksand\QuicksandServiceProvider"

最后,通过在 **app/Http/Console/Kernel.php** 中添加以下命令来调度该命令

protected function schedule(Schedule $schedule)
{
$schedule->command('quicksand:run')
->daily();
}

Quicksand 选项

让我们看看 Quicksand 中可用的选项,这些选项在 **config/quicksand.php** 文件中提供

return [
// Days before deleting soft deleted content
'days' => 30,
 
// Whether to log the number of soft deleted records per model
'log' => false,
 
// List of models to run Quicksand on
'models' => [
// Example::class,
// User::class => [
// 'days' => '30' // per-model days setting override
// ]
]
];

首先,您可以选择设置永久删除前的日期,可以选择开启或关闭软删除记录数量的日志记录。最后,最重要的选项是 **“models”** 数组,您可以在其中添加您希望 Quicksand 对其执行清理过程的模型列表。

您可以像这样添加您的模型

User::class,

或者,如果您想要更多控制,您可以像这样独立地覆盖特定模型的日期

Post::class => [
'days' => '60' // per-model days setting override
]

如果您想知道它是如何工作的,这里就是它的核心

Quicksand 所做的是使用 onlyTrashed 方法获取所有软删除记录,然后基于 deleted_at 列进行限制,当它小于配置日期时,最后强制删除结果。

就是这样,简单的选项,易于使用,非常方便的包。如果您想自动清理您的软删除记录,请尝试一下,您可以在 Github 上查看 **Quicksand** 的源代码

另一个与 Quicksand 搭配使用的很好包是 级联软删除,当您想删除所有关联时。

Diaa Fares photo

Laravel Artisan、Web 开发人员、技术极客

归档于
Cube

Laravel 新闻通讯

加入 40,000 多名其他开发人员,绝不错过任何新的技巧、教程等。

Laravel Forge logo

Laravel Forge

轻松创建和管理您的服务器,并在几秒钟内部署您的 Laravel 应用程序。

Laravel Forge
Tinkerwell logo

Tinkerwell

Laravel 开发人员必备的代码运行器。使用 AI、自动完成功能和对本地和生产环境的即时反馈进行微调。

Tinkerwell
No Compromises logo

无妥协

Joel 和 Aaron,来自“无妥协”播客的两名经验丰富的开发人员,现在可以为您的 Laravel 项目提供雇用。⬧ 固定费率 7500 美元/月。⬧ 没有冗长的销售流程。⬧ 没有合同。⬧ 100% 退款保证。

无妥协
Kirschbaum logo

Kirschbaum

提供创新和稳定性,以确保您的 Web 应用程序取得成功。

Kirschbaum
Shift logo

Shift

正在运行旧版本的 Laravel?即时、自动化的 Laravel 升级和代码现代化,让您的应用程序保持新鲜。

Shift
Bacancy logo

Bacancy

让您的项目充满活力,只需每月 2500 美元,即可获得拥有 4-6 年经验的经验丰富的 Laravel 开发人员。获得 160 小时的专业知识和 15 天的无风险试用。立即预约电话!

Bacancy
Lucky Media logo

Lucky Media

立即获得幸运 - Laravel 开发的理想之选,拥有超过十年的经验!

Lucky Media
Lunar: Laravel E-Commerce logo

Lunar:Laravel 电子商务

Laravel 的电子商务。一个开源包,将现代无头电子商务功能的强大功能带到 Laravel。

Lunar:Laravel 电子商务
LaraJobs logo

LaraJobs

官方 Laravel 工作板

LaraJobs
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit:Laravel SaaS 启动工具包

SaaSykit 是一个 Laravel SaaS 启动工具包,它包含运行现代 SaaS 所需的所有功能。支付、漂亮的结账、管理面板、用户仪表板、身份验证、现成的组件、统计信息、博客、文档等等。

SaaSykit:Laravel SaaS 启动工具包
Rector logo

Rector

您无缝升级 Laravel、降低成本和加速创新的合作伙伴,以帮助成功企业

Rector
MongoDB logo

MongoDB

通过 MongoDB 和 Laravel 的强大集成来增强您的 PHP 应用程序,使开发人员能够轻松高效地构建应用程序。支持事务、搜索、分析和移动用例,同时使用熟悉的 Eloquent API。了解 MongoDB 的灵活、现代数据库如何改变您的 Laravel 应用程序。

MongoDB
Maska is a Simple Zero-dependency Input Mask Library image

Maska 是一个简单的无依赖输入掩码库

阅读文章
Add Swagger UI to Your Laravel Application image

将 Swagger UI 添加到您的 Laravel 应用程序

阅读文章
Assert the Exact JSON Structure of a Response in Laravel 11.19 image

在 Laravel 11.19 中断言响应的精确 JSON 结构

阅读文章
Build SSH Apps with PHP and Laravel Prompts image

使用 PHP 和 Laravel 提示构建 SSH 应用程序

阅读文章
Building fast, fuzzy site search with Laravel and Typesense image

使用 Laravel 和 Typesense 构建快速、模糊的网站搜索

阅读文章
Add Comments to your Laravel Application with the Commenter Package image

使用 Commenter 包在您的 Laravel 应用程序中添加评论

阅读文章