mkeremcansev Çalışması gereken sorgu şu:
Opportunity::where('status','<>', 0)
->whereDate('end', now())
->update([
'status' => 0
]);
Provider içinde bu tür işlemler yapılmaz. Bunun günlük kontrol edilebilmesi için öncelikle sunucuda bir cron tanımlamanız gerekiyor. Bu tanımlama şu şekilde olacak:
* * * * * /usr/local/bin/php /projem/artisan schedule:run >> /dev/null 2>&1
artisan dosyası projenin kök dizininde yer alır. Eğer projeniz /var/www/projem.com içerisinde ise demek ki bu cron girdisi şöyle olacak demektir:
* * * * * /usr/local/bin/php /var/www/projem.com/artisan schedule:run >> /dev/null 2>&1
Eğer php yolu /usr/local/bin/php değilse which php
ile komut satırından öğrenebilirsiniz ya da birden fazla php sürümü varsa hangisini kullanmak istiyorsanız onun yolunu kullanacaksınız.
Bunu yaptıktan sonra artık Laravel içindeki task scheduler özelliğini kullanabilirsiniz. Sorgumuzun belirli bir zaman diliminde çalışmasını istiyorsak app/Console/Kernel.php içindeki schedule yönteminin içine tanımlama yapıyoruz. Mesela sorgunun günlük olarak çalışmasını istiyorsak:
protected function schedule(Schedule $schedule)
{
$schedule->call(function () {
Opportunity::where('status','<>', 0)
->whereDate('end', now()) // ya da now() yerine Date::now()
->update([
'status' => 0
]);
})->daily();
}
Günlük olarak otomatik çalışacak ve status'u 0 olmayan kayıtların end alanı bugünün tarihi ise status değerini 0 yapacak.
Yazdığınız koda bakılırsa ne dokümanları okuyorsunuz ne de Laravel ile ilgili araştırma yapıyorsunuz. Bu işte ciddiyseniz yanlış yapıyorsunuz.
https://laravel.com/docs/8.x/scheduling
Tarih işlemlerinde Carbon kullanıyoruz:
https://github.com/briannesbitt/Carbon
Laravel'de bu Carbon sınıfını kullanan bize ait Date objemiz var. O yüzden direkt Carbon kullanmak yerine Date kullanmalısınız:
use Illuminate\Support\Facades\Date;
$future = Date::now()->addDays(20); // 20 gün ekle
$future->toDateTimeString(); // "2021-09-19 22:04:49"
$future->subWeek() // 1 hafta çıkar
->addHours(2) // 2 saat ekle
->subMinutes(13) // 13 dakika çıkar
->timestamp; // 1631490787
Bol bol doküman okuyun.