Laravel 5.0 отложено выполнение - PullRequest
0 голосов
/ 04 июня 2018

Мне нужно отложить выполнение одного метода в Laravel 5.0, или, если быть более точным, мне нужно, чтобы он выполнялся в определенное время.Метод заключается в отправке уведомления через GCM в мобильное приложение, и мне нужно сделать это несколько раз и установить другое время.Как я выяснил, нет способа, как намеренно задерживать уведомление в GCM.Я знаю основы работы с cron и расписанием в Laravel, но не могу найти ответ на мою проблему.

Метод, который мне нужно выполнить с задержкой, таков:

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 голосов
/ 04 июня 2018

Вы также можете использовать Очереди с отложенной отправкой , если это имеет больше смысла.Поскольку вы намекнули, вам нужно сделать это только один раз.

ProcessJobClassName::dispatch($podcast)->delay(now()->addMinutes(10));
0 голосов
/ 04 июня 2018

Если вы посмотрите на 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(); 
...