Как запланировать запрос временной базы? в laravel - PullRequest
1 голос
/ 05 августа 2020

Я использую этот запрос для обновления значения статуса

public function updateStatus(Request $request)
{
    $customer = Customer::findOrFail($request->user_id);
    $customer->status = $request->status;
    $customer->new_customer_status = 1;
    $customer->save();
    return response()->json(['message' => 'User status updated successfully.']);
}

Я хочу, чтобы если status == 1, то через одну неделю $customer->new_customer_status должен автоматически стать NULL

Как можно Я планирую запрос на основе времени или дней, который будет запускаться автоматически через неделю или в заданное время?

Ответы [ 2 ]

1 голос
/ 05 августа 2020
  1. создайте команду с php artisan make:command UpdateUserNotNew

  2. внутри этого класса app / Console / Commands / UpdateUserNotNew. php установите имя команды:

    protected $signature = 'cron:update-user-not-new';

    метод под ручкой:

public function handle()
{
    Customer::whereDate('created_at', '>', now()->addDays(7)->toDateTimeString())
        ->update([
            'new_customer_status' => null
        ]);
}
внутри app / Console / Kernel. php под schedule() методом добавьте эту строку:
protected function schedule(Schedule $schedule)
{
   $schedule->command('cron:update-user-not-new')->daily();  //<--- this line
}

Чтобы все это работало, у вас должен быть включен crontab на вашем сервере, эта информация находится в Laravel документах: https://laravel.com/docs/7.x/scheduling#introduction

1 голос
/ 05 августа 2020

Вы должны поместить свой запрос в задание в очереди. Затем вы можете запланировать выполнение этого задания через неделю.

Это пример, приведенный в документации, прямо здесь: https://laravel.com/docs/7.x/queues#delayed -dispatching

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

Где ProcessPodcast - класс должности. Я позволю вам глубже погрузиться в документацию, чтобы увидеть, как создать работу, но это действительно просто и понятно. Конечно, в вашем случае вам, вероятно, следует использовать now()->addWeek() вместо now()->addMinutes(10).

...