如何在 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 分钟后的每条新记录制定调度程序任务? 的相关文章

  • Laravel Blade 创建 url

    我有一个简单的问题 基本上我从数据库中获取网站的名称并根据其名称创建一个链接 看起来像 foreach websites as website a class websites href asset website gt name a en
  • 什么是克朗?我该如何使用这个? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions http
  • 如何使用 eloquent/fluent 从单个查询中更新多行?

    我正在学习如何使用 eloquent fluent 从单个查询中插入多行我在这里找到了答案 https stackoverflow com questions 29723865 how to insert multiple rows fro
  • 致命错误:发送表单时未找到“App\Http\Controllers\Input”类

    我正在尝试发送一封包含来自 Laravel 应用程序的表单的电子邮件 当你点击提交时 它会抛出上述错误 致命错误 找不到类 App Http Controllers Input 不知道为什么 因为我没有 也不知道我需要有一个输入控制器 或者
  • Laravel - SQL - SQLSTATE[01000]:警告:1265 第 1 行列“nsfw”的数据被截断

    我试图保护数据库中的一些数据并收到以下错误 SQLSTATE 01000 警告 1265 第 1 行的列 nsfw 的数据被截断 nsfw 列的标准值是 0 这是我的桌子 nsfw 列也在模型中 fillable array 我想检测是否选
  • Laravel Eloquent - 附加与同步

    有什么区别attach and sync 在 Laravel 4 的 Eloquent ORM 中 我试图环顾四周 但什么也没找到 附 处理多对多关系时插入相关模型 不需要数组参数 Example user User find 1 user
  • 社交登录重复帐户冲突

    我正在制作一个新应用程序 除了常规电子邮件 密码注册之外 还需要多个社交注册 但是有一种特殊情况可能会导致数据完整性问题 例子 用户在 Facebook 上注册 但没有收到任何电子邮件回复 我在数据库中创建一个用户 将电子邮件和密码设置为
  • Http Auth 不适用于 PHP

    我使用 Laravel Lumen Shield 扩展进行 Http 身份验证 但是在我的本地计算机上一切都很完美 我只在我们的服务器上遇到了问题 问题是在我提交正确的登录数据后 登录屏幕再次出现 我尝试了不同的登录数据 不同的浏览器 登录
  • 我如何在 Laravel 5.5 的 FormRequest 类中返回自定义响应?

    我正在制作一个 API 我想返回错误数组 其格式如下 validator gt errors 当我通过手动方式验证请求时生成 但我无法操纵响应 我想找到正确的制作方法 这可以在 Laravel 5 4 中通过formatErrors方法并包
  • 我可以将模型关联到 laravel 中的通知表吗?

    我一直在处理通知 并且很快就完成了它 除非我觉得需要删除通知并将其与帖子相关联 有什么方法可以将模型与帖子关联起来吗 notifications桌子 我想用 table创建通知模型后在模型中找到的属性 编辑 或者我可以在删除帖子时删除通知吗
  • 为什么turn服务器不支持tcp连接?

    我是 WebRTC 新手 我需要为我的 webrtc 应用程序配置我自己的 Turn 服务器 我使用以下命令安装了我的转弯服务器 apt get install coturn 我只需要通过 tcp 运行转变服务器 它不必使用 UDP 进行任
  • 返回值必须是 ?Illuminate\\Database\\Query\\Builder, App\\Models\\ModelName 返回的类型

    我试图得到以下回应 user id 1 first name john last name doe email email protected cdn cgi l email protection phone number 12345678
  • Dingo API 删除“数据”信封

    有没有一种简单的方法可以从 Dingo API 响应中删除 数据 信封 当我使用这个 Transformer 来转换用户模型时 class UserTransformer extends EloquentModelTransformer L
  • 如何使用 cron 作业运行 python 文件

    您好 我创建了一个 python 文件 例如file example py 该文件将输出 sensex 值 假设该文件在linux系统上的路径为 Desktop downloads file example py 我通常会运行该文件pyth
  • Laravel 社交名流 $user->getId()?

    我不确定这是否是真正导致我的问题的原因 但也许有人会知道 当我使用 Laravel Socialite 并执行以下操作时 social user Socialite driver provider gt user 然后我的代码中的其他地方执
  • 如何对 Laravel Mailable 进行断言

    在测试中 我想使用以下方法对 Mailable 做出一些断言Mail assertSent 像这样 Mail assertSent MyMailable class function mail use user return mail gt
  • 如何在控制器中获取 User()->id (Laravel 8+)

    我正在尝试通过以下方式选择任务用户身份 但我无法将其放入控制器 我从中选择数据DB 我尝试过很多事情 其中 一些来自堆栈溢出 但它不起作用 I tried 1 userId Auth check Auth id true 2 Auth us
  • 如何在 MySQL 中存储工作日列表?

    我正在使用编写一个应用程序PHP我需要存储一个独特的工作日列表MySQL 在应用程序中 我有一个数组来存储工作日 如下所示 days Wed Thu Sat 我知道我可以使用SET列 但我不想使用这种类型 因为它与我正在使用的框架 Lara
  • 验证 Laravel 中的选择表单

    我的联系表上有这个 html div class form group div
  • Laravel 5 模型 $cats 到数组 utf-8 JSON_UNESCAPED_UNICODE

    当您有一个数组字段并将其保存在数据库中时 它会对数组进行漂亮的 json encode 但没有 JSON UNESCAPED UNICODE 选项 数据最终如下所示 en u039d u03ad u03b1 这几乎没什么用 解决方案当然是使

随机推荐