清理表中的数据?

时间:2019-03-13 17:03:17

标签: laravel laravel-5 laravel-5.7

这是正在发生的事情的简化版本:

  1. 用户填写表格。

  2. 存储表单时,行ID存储在会话中。

  3. 然后用户登录。

  4. 捕获到用户登录事件,然后使用用户ID更新正确的行(从会话获取的ID)。

现在,如果用户仅完成第1步和第2步,则放弃该过程,因为他们不想登录数据库,剩下的数据行都不属于用户。

我需要删除这些行。

实现此目标的最佳方法是什么?

  1. 是否有一种方法可以执行跨请求运行的数据库事务,因此可以在登录之前启动它,而在登录之后提交?

  2. 最好经常运行清理脚本,不查找用户归因的行并将其删除吗?

还是有另一种方法?

1 个答案:

答案 0 :(得分:1)

我将使用调度程序创建清理脚本,请参见下面的基本思想:

// app\Console\Kernel.php

protected function schedule(Schedule $schedule)
    {
        $schedule->call(function () {
            // Query all records that havent changed in an x-amount of time
            // and remove them.
        })->everyDay();
    }

然后,您只需将以下CRON脚本添加到服务器:

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

Artisan帮助程序将每分钟调用一次调度程序,并根据其间隔运行每个任务。

由于您无法确定用户是否会回来,包括Laravel会话很可能会很快清理自身的事实(我相信默认生存时间是120分钟),因此不会有任何其他触发器来删除特定记录从您的数据库中。