Я хочу запускать событие с именем ThriftStarted каждый раз, когда команда расписания выполняется успешно. Слушатель события GeneratePaymentSchedule должен обработать событие и сгенерировать графики платежей. Но мне кажется, что мне чего-то не хватает, поэтому при выполнении расписания расписание платежей не генерируется должным образом.
Вот как выглядит мой код Ядро. php
<?php
namespace App\Console;
use App\Thrift;
use App\Events\ThriftStarted;
...
class Kernel extends ConsoleKernel
{
...
protected function schedule(Schedule $schedule)
{
// start thrift plan
$schedule->call(function() {
// get all open thrift plans
$thrifts = Thrift::where('open', true)->get();
// set open to false if contributors equals subscribers
foreach ($thrifts as $thrift) {
if ($thrift->contributors === $thrift->subscriptions->count()) {
$thrift->update(['open' => false]);
// dispatch thriftStarted event
event(new ThriftStarted($thrift));
}
}
})->everyMinute();
}
...
}
Событие ThriftStarted
<?php
namespace App\Events;
use App\Thrift;
...
class ThriftStarted
{
use Dispatchable, InteractsWithSockets, SerializesModels;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(Thrift $thrift)
{
$this->thrift = $thrift;
}
...
}
прослушиватель GeneratePaymentSchedule
<?php
namespace App\Listener;
use App\Payment;
use App\Events\ThriftStarted;
...
class GeneratePaymentSchedule
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param ThriftStarted $event
* @return void
*/
public function handle(ThriftStarted $event)
{
if ($event->thrift->open === 0) {
$subs = Subscription::where('thrift_id', $event->thrift->id)->get();
$schedule = Carbon::parse(now())->toDateString();
foreach ($subs as $sub) {
Payment::create([
'user_id' => $sub->user_id,
'thrift_id' => $sub->thrift_id,
'contribution' => $sub->thrift->contribution,
'schedule' => $schedule,
]);
$schedule = Carbon::parse($schedule)->addMonth()->toDateString();
}
}
}
}
EventServiceProvider
<?php
...
class EventServiceProvider extends ServiceProvider
{
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
App\Events\ThriftStarted::class => [
App\Listener\GeneratePaymentSchedule::class,
]
];
...
}
Я что-то пропустил?