Повторяемая работа для Laravel json api

Я пишу Laravel json API на MySQL. Представьте, что пользователь создает запись в моей базе данных. Я хочу выполнить какую-то операцию через 24 часа после создания этой записи. Я могу добиться этого, используя: AfterInsertJob::dispatch()->delay(now()->addHours(24));. Но мне нужно выполнять эту операцию снова и снова, пока запись не будет создана. Итак, как я могу это сделать? Должен ли я отправлять работу внутри работы? Я имею в виду Должен ли я отправить AfterInsertJob внутрь AfterInsertJob? Я мог бы использовать Schedule, но тогда как остановить это расписание из AfterInsertJob?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
77
2

Ответы 2

Зачем использовать работу для задачи. Просто запустите запланированную команду, которая проверит все ваши требования.

Добавьте флаг к записи, которую создает пользователь. Установите этот флаг в команде, которую вы пишете, и выполните требуемую задачу. Если пользователь делает все, что ему нужно, установите флаг, и ваша команда проигнорирует эту запись. Если нет, то это будет сделано до тех пор, пока он не будет установлен.

Если это требуется ровно через 24 часа после создания, вы можете проверить дату создания (и кратную ей) и флаг. Но есть и другие суровые способы.

Обновлять:

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

  1. задерживать
  2. количество попыток / максимальное количество попыток

задерживать это метод, называемый почему диспетчеризация

максимальное количество попыток является собственностью класса работы под названием «попытки»

Ваша работа проверит все, что она должна проверить, и если требования НЕ будут выполнены пользователем, вы позволите работе завершиться ошибкой. Если это так, то он будет возвращен в очередь с задержкой в ​​24 часа. Это будет повторяться до тех пор, пока не будет достигнуто количество «максимальных попыток».

вы можете в AfterInsertJob->handle при выполнении создать новую очередь:

$need_to_work = true;
.....

if ( $need_to_work ){
AfterInsertJob::dispatch()->delay(3);
}

Другие вопросы по теме