2015-12-30 3 views
2

Я разработал небольшую систему событий. Создавая новое событие, событие startdate может быть установлено в будущем.Laravel - Отправка уведомления при запуске события

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

Я пытался что-то подобное с планированием и собственный ServiceProvider:

$challenges = Auth::User()->challenges()->where('startdate', '<=', Carbon::now())->get(); 
     foreach($challenges as $challenge) { 

      Notifynder::category('challenge.started') 
       ->from(1) 
       ->to(1) 
       ->url(url("challenge/$challenge->slug")) 
       ->send(); 

     } 

Но да, так что уведомление будет посылать everytime..not хорошее решение. Мне они нужны только один раз, когда событие startdate переключается с будущего на сегодняшний.

У вас есть идея? Спасибо заранее!!

С уважением

+0

Какую версию Laravel вы используете? – ash

+0

Я использую Laravel 5 :) – cssler

+0

Существуют значительные различия между 5.0, 5.1 и 5.2 - Но все версии позволяют планировать и останавливать очереди. Просто что-то вспомнить в будущем. – ash

ответ

0

Лично я бы просто создать новое поле в базе данных, которая будет указывать, если вы послали уведомление. Если вы этого не сделали и дата начала, вы хотите отправить уведомления и установить флаг в 1/true.

Тем не менее, решение, которое вы создали, не является лучшим/наиболее эффективным, так как теперь вы будете запрашивать базу данных при каждом отдельном запросе. Лучше было бы создать некоторую работу CRON, чтобы переориентировать такую ​​вещь.

Для получения дополнительной информации проверить это: https://laravel.com/docs/5.2/scheduling

Это даст вам некоторую основную информацию о том, что вам нужно сделать, чтобы сделать некоторые perodically actions.You также может прочитать о Artisan Commands , так что вы можете запустить его каждые x минут.

+0

Спасибо большое! :) Я выполняю эту команду уже как консольную команду каждую минуту с помощью задания Cron, поэтому база данных не будет запрашиваться при каждом отдельном запросе. Я должен искать флаги. Спасибо за Ваш ответ! :) – cssler

+0

Я решил это, создав новые поля в таблице базы данных, спасибо за вашу помощь! – cssler