首页 > 解决方案 > Laravel - 如何制作一个每天在同一时间运行的函数?

问题描述

我在 laravel 中做一个函数,我的用户在其中注册了一个模板消息:

public function createTemplate(Request $request)
{
    if(!($error = $this->isNotValidate($request))){
        //Log::error(print_r("validado", true));

        $message = Message::create($request->toArray());

        //job that runs every day calling my sendMessag

        $response = ['message' => $message];
        return response($response, 200);
    }
    return response($error, 422);
}

我希望在注册这个mangem之后,触发一个每天同时运行的服务,然后在这个函数中我将实现我的消息触发逻辑:

public function sendMessage()
{
    $messages = Message::where('type', 'like', 'template')->get();
    foreach ($messages as $message){
        if(/*logic if send message or not*/){
            $recive_ids = //get my recive_ids

            $users = User::where('user_group', $recive_ids)->get();

            Notification::send($users, new MessageNotification($message));
        }
        
    }     
}

如何创建每天调用我的 sendMessage 函数运行的作业?

标签: laravel

解决方案


你可以使用 Laravel 调度功能来运行你的函数或任何命令。

首先,您必须找到适合您需要的方法。

之后,您必须更新可用的计划功能app/Console/Kernel.php

->dailyAt('13:00');

根据您的要求,您需要一个调度方法 dailyAt()。

二、schedule:run在crontab中添加命令每分钟运行一次

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

您应该参考此文档以获取更多信息附表文档


推荐阅读