这是正在发生的事情的简化版本:
用户填写表格。
存储表单时,行ID存储在会话中。
然后用户登录。
捕获到用户登录事件,然后使用用户ID更新正确的行(从会话获取的ID)。
现在,如果用户仅完成第1步和第2步,则放弃该过程,因为他们不想登录数据库,剩下的数据行都不属于用户。
我需要删除这些行。
实现此目标的最佳方法是什么?
是否有一种方法可以执行跨请求运行的数据库事务,因此可以在登录之前启动它,而在登录之后提交?
最好经常运行清理脚本,不查找用户归因的行并将其删除吗?
还是有另一种方法?
答案 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分钟),因此不会有任何其他触发器来删除特定记录从您的数据库中。