如何在 Laravel 中为 20 分钟后的每条新记录制定调度程序任务?

2024-03-27

我有一个停车系统,我使用 Angular 6 + Laravel 作为后端,但我有一个具体问题,我不知道正确的方法。

公园有两个图腾,它们向我的服务器发送一个条目。只有当客户从出口走出图腾并进入付款区时,我才会检查客户是否无效。

这是我的代码,当他把有 EAN_13 条形码读取的票时。这是我的退出图腾准备好的代码:

public function getEntrysDataByEan(Request $request)
{
    if (isset($request)) {
        $entryean = $request->input('entryean13');
        $entry = $this->mdMovEntry->getEntrysDataByEan($entryean);

        if (empty($entry)) {
            $response["success"] = 0;
            $response["message"] = "Não existe nenhuma entrada correspondente";
        } else {
            $nowHour = Carbon::now();
            $enterHour = Carbon::parse($entry[0]->updated_at);

            $difmin = $enterHour->diffInMinutes($nowHour);
            $dif = $enterHour->diffInHours($nowHour);

            if ($difmin <= 20) {
                $this->mdMovEntry->validatedEntryByEan($entryean, Carbon::parse($entry[0]->updated_at), $nowHour);
                $entry[0]->validated = 'S';
            } else {
                $this->mdMovEntry->devaluedEntryByEan($entryean, Carbon::parse($entry[0]->updated_at));
                $entry[0]->validated = 'N';
            }

            $response["success"] = 1;
            $response["message"] = "Entrada retornada com sucesso";
            $response["entry"] = $entry;
        }
    } else {
        $response["success"] = 0;
        $response["message"] = "Nenhum dado enviado";
    }

    return $response;
}

问题是,我认为仅读取客户端是否可以出去需要太多处理,因此我从 Laravel 中搜索任务调度方法和作业方法,但没有找到任何适合我的问题的信息。

我想要的是,当输入区域中的图腾在我的数据库中进行插入时,我创建一些作业或任务,20 分钟后,他将每条新记录置为无效。

当客户端出去时,系统只是在数据库上执行 getEntry 并检查他是否经过验证。

我怎样才能做到这一点?我问这个是因为任务的每个示例都是全局执行,但我只想为每个新记录分配一个任务,这可能吗?


考虑使用模型事件 https://laravel.com/docs/5.7/eloquent#events和这个结合延迟发货 https://laravel.com/docs/5.7/queues#delayed-dispatching对于排队的作业。

下面就来听听created当新条目插入数据库并调度延迟 20 分钟的作业以使条目稍后失效时发生的事件。

使条目作业无效

class InvalidateEntry implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $entry;

    /**
     * Create a new job instance.
     *
     * @param  Entry  $entry
     * @return void
     */
    public function __construct(Entry $entry)
    {
        $this->entry = $entry;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // you'll probably need to add some conditional logic 
        // before updating the entry to determine if the 
        // action is still required.
        $isEntryInvalid = ...;

        if ($isEntryInvalid) { 
            $this->entry->update([
                'validated' => 'N'
            ]);
        } else {
            // delete the job from the queue
            $this->delete();
        }
    }
}

入门型号

class Entry extends Model
{
    public static function boot()
    {
        parent::boot();

        static::created(function (Entry $entry) {
            InvalidateEntry::dispatch($entry)->delay(now()->addMinutes(20));
        });
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Laravel 中为 20 分钟后的每条新记录制定调度程序任务? 的相关文章

  • 我应该在哪里编写结合两个模型的控制器逻辑

    想象一下我有 PostController 和 CommentController 当然我有 Post 模型和 Comment 模型 所以现在我收到请求对Post和Comment模型进行一些修改 也许这个修改逻辑不仅结合了两个模型 而且结合
  • 应用中间件后服务提供商的访问请求

    Bindings 我在接口和实现之间的服务提供者中使用绑定 public function register this gt app gt bind MyInterface MyImplementation class 中间件 在我的中间件
  • Laravel 模型访问器从缓存中获取 - 性能增强

    我在数据库中有一个项目列表 每个项目都可以选择被否决或赞成 这些投票与其他项目字段一起存储在 MySql 中 例如这样的事情 Schema create items function table table gt increments id
  • “路径不能为空”laravel

    我想将 pdf 文件保存在存储文件夹中 但是当我在表单中插入文件并单击按钮时 它会显示错误 路径不能为空 然而 路径并不空 这是我可以执行此操作的函数 public function getFilenametostore Request r
  • Laravel 按特定值对结果进行排序

    我有这行从数据库获取结果的代码 clanMembers gt User find Auth user gt clan id gt where clan id Auth user gt clan id gt orderBy username
  • npm run dev 和 npm run production 之间的区别

    我对 Laravel 和 vue js 很陌生 请让我知道它们之间有什么区别npm run dev and npm run production 这和环境有关系吗 npm run dev创建源映射并且不会缩小 js css 这使得调试和查找
  • Laravel 5 文件下载无效

    使用时Response download下载文件时 我注意到图像和其他二进制文件传输不正确 改变Content Typeheader 没有改变任何东西 也没有明确禁止缓存或强制内容的长度 造成这个问题的原因可能是什么 这个问题的解决方案可以
  • Laravel 8,如何在后台运行作业(脚本)?

    我正在尝试使用 Laravel 8 在后台运行一个耗时的脚本 但无法完全让它工作 我尝试按照这里的文档进行操作https laravel com docs 8 x queues https laravel com docs 8 x queu
  • 如何在 Laravel 中更改应用程序的命名空间?

    我无法在 Laravel 5 8 中更改应用程序的命名空间 我正在使用 artisan 来更改它 php artisan app name TestApp 结果是 中没有定义命令app 命名空间 看着php artisan你应该有一个php
  • Crontab 每 5 分钟一次 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我如何告诉 crontab 每 5 分钟运行一次 但从每小时的第二分钟开始 换句话说 我想在以下时间执行我的脚本minute 5 2 例如 我的脚本应
  • Angular2 + Laravel 与实时和 WebSockets

    我构建了一个应用程序 并计划与 Angular 2 和 laravel 进行实时战斗 例如 你按下 攻击 按钮 你的对手就会实时看到他的生命在下降 我的应用程序构建有 前端 角2 Backend PHP Laravel 5 2 现在我正在寻
  • Laravel 5 - 更改默认日志位置,将日志文件移至应用程序之外

    如何更改默认日志文件位置
  • 自动备份远程托管服务器的最佳实践

    我正在尝试设置一个用于团队笔记的服务器 我想知道自动备份其数据 又称我的笔记 的最佳方法是什么 目前我计划在 docker 镜像中运行服务器 docker 镜像将由托管服务 例如 Google 托管 我找到了一个适合我的需求的免费托管服务
  • 如何将 Laravel 5.4 与 Angular 4 集成

    我知道如何创造完整的拉拉维尔 5 4自己的项目 我也知道如何使用创建 SPA角4 Problem 我不知道如何将 Laravel 与 Angular 集成 另外 我想使用 Laravel 5 4 作为后端 使用 Angular 4 作为前端
  • 截断 Mysql 表 Cron 作业?

    我在如何使用 cron 作业截断 Mysql 表时遇到了一些麻烦 无论我尝试什么 我似乎都无法让数据库清除表格 感谢您的帮助 mysql uderp example pexample hlocalhost Dexample e TRUNCA
  • 限制自己超载外部 API 的速率

    我发现了很多信息和脚本示例 展示了如何对 API 用户进行速率限制 但我无法找到任何示例来说明在施加这些限制时如何对您自己的 API 请求进行速率限制 我总是用诸如以下的代码来限制我的脚本sleep or usleep命令 但感觉这是一种低
  • 如何在laravel中注册后自动登录

    我在 laravel 中注册用户时遇到问题 user假设是包含所有数组元素的数组 同时自动登录以下代码结果false 数据库中保存的密码是hash make password user id this gt user model gt ad
  • AWS-PHP-SDK / SNS 直接寻址返回错误

    您好 我正在使用 Laravel 4 设置来利用 AWS SNS 向我的 iOS 设备发送推送消息 从 AWS 控制台向我的设备发布命令效果很好 然后我尝试从 PHP sns AWS get sns sns gt publish array
  • Laravel Vue 组件只能传递数字?

    在我的 UserMenu vue 中我写道 export default props nameVal data return 并在blade php中
  • 如何使用更新资源控制器 laravel 4?

    我有带有索引 编辑 更新方法的客户控制器 Route resource customer CustomerController 控制器方法更新 public function update id echo id 我的 HTML 表单

随机推荐