Laravel 清理表中的数据?

Laravel 清理表中的数据?,laravel,laravel-5,laravel-5.7,Laravel,Laravel 5,Laravel 5.7,以下是正在发生的事情的简化版本: 用户完成一个表单 存储表单时,行id存储在会话中 然后用户登录 捕获用户登录事件,然后使用用户id更新正确的行(从会话中获取的id) 现在,如果用户只完成了步骤1和步骤2,则放弃该过程,因为他们不想登录数据库,留下的数据行不属于用户 我需要删除这些行 实现这一目标的最佳方式是什么 是否有一种方法可以执行跨请求运行的数据库事务,以便在登录之前启动并在登录之后提交 每隔一段时间运行一次清理脚本是否会是最好的,即没有发现用户属性的行并删除它们 或者还有其他方法吗?我将

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

  • 用户完成一个表单

  • 存储表单时,行id存储在会话中

  • 然后用户登录

  • 捕获用户登录事件,然后使用用户id更新正确的行(从会话中获取的id)

  • 现在,如果用户只完成了步骤1和步骤2,则放弃该过程,因为他们不想登录数据库,留下的数据行不属于用户

    我需要删除这些行

    实现这一目标的最佳方式是什么

  • 是否有一种方法可以执行跨请求运行的数据库事务,以便在登录之前启动并在登录之后提交

  • 每隔一段时间运行一次清理脚本是否会是最好的,即没有发现用户属性的行并删除它们


  • 或者还有其他方法吗?

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

    // 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分钟),因此不会有任何其他触发器从数据库中删除特定记录。

    我个人会选择“清理脚本”解决方案。只需编写一个轻量级命令,并将其添加到控制台内核中,每30分钟/1小时执行一次。您可以为这些情况设置默认id。并将其附加到会话中缺少变量的每一行。这样,您可以删除具有该id的每一行。是否有任何原因导致您无法在步骤1和步骤2之间的会话中存储所有表单数据?@panthro是的,在会话中存储太多数据不是一个好做法。您仍然可以将数据存储在临时文件中(查看SyssiGETHyPultdidir方法),然后在会话中保存文件的路径。尽管我怀疑这会发生很多,但是如果脚本发生在提交表单和登录的人之间运行,那么这不会潜在地消除它们的行吗?您可能希望每小时运行一次,并且只删除60分钟以尝试阻止它。