Laravel 5.0延迟执行

时间:2018-06-04 13:43:30

标签: php laravel google-cloud-messaging

我需要在Laravel 5.0中延迟执行一个方法,或者更具体一点,我需要在特定的时间执行它。该方法是通过GCM向移动应用程序发送通知,我需要反复进行并将其设置为不同的时间。正如我发现的那样,如何故意在GCM中延迟通知。我知道在Laravel中使用cron和日程安排的基础知识,但我无法找到问题的答案。

我需要延迟执行的方法是:

public function pushAndroid($receiver, $message, $data)
{

    $pushManager = new PushManager(PushManager::ENVIRONMENT_DEV);

    $gcmAdapter = new GcmAdapter(array(
            'apiKey' => self::GCM_API_KEY
    ));

    $androidDevicesArray = array(new Device($receiver));

    $devices = new DeviceCollection($androidDevicesArray);

    $msg = new GcmMessage($message, $data);

    $push = new Push($gcmAdapter, $devices, $msg);
        $pushManager->add($push);
        $pushManager->push(); 

}

应该执行的(日期+时间)信息存储在数据库的表中。对于每个通知,我只需要做一次,而不是重复。

2 个答案:

答案 0 :(得分:1)

如果您查看https://laravel.com/docs/5.6/scheduling,可以设置符合您需求的内容。

使用

的外观制作一些东西
$schedule->call(function () {
   // Here you get the collection for the current date and time
   $notifications = YourModel::whereDate('datecolumn',\Carbon\Carbon::now());
   ...
})->everyMinute(); 

答案 1 :(得分:0)

如果这更有意义,您也可以使用Queues with Delayed Dispatching。既然你暗示你只需要做一次。

ProcessJobClassName::dispatch($podcast)->delay(now()->addMinutes(10));