Untuk mengelola kuota harian yang bisa berkurang, bertambah, dan reset setiap hari, kamu bisa menggunakan gabungan fitur dari MySQL dan Laravel untuk hasil yang optimal dan fleksibel.
Berikut adalah pendekatan terbaik:
🔧 Struktur Tabel (Contoh di MySQL)
Misalnya kamu punya tabel kuota_harian
:
CREATE TABLE kuota_harian (
id INT AUTO_INCREMENT PRIMARY KEY,
tanggal DATE NOT NULL,
kuota INT NOT NULL DEFAULT 0,
kuota_terpakai INT NOT NULL DEFAULT 0
);
🎯 Fitur yang Diperlukan
1. Reset Otomatis Tiap Hari
Ada 2 pendekatan:
✅ (Disarankan) Gunakan Laravel + Scheduler
Buat job/artisan command yang dijalankan setiap hari lewat Laravel Scheduler.
Langkah-langkah:
- Tambahkan
php artisan make:command ResetKuotaHarian
- Di dalamnya, insert data baru untuk hari ini, atau reset kuota jika sudah ada.
- Jalankan lewat scheduler (
app/Console/Kernel.php
):
protected function schedule(Schedule $schedule)
{
$schedule->command('kuota:reset')->daily();
}
🔁 Alternatif: Gunakan Event di MySQL
Bisa juga buat event MySQL:
CREATE EVENT reset_kuota_harian
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_DATE + INTERVAL 1 DAY
DO
INSERT INTO kuota_harian (tanggal, kuota, kuota_terpakai)
VALUES (CURDATE(), 10, 0);
Namun, MySQL Events kurang fleksibel dan perlu aktifkan event_scheduler
.
2. Mengurangi/Menambah Kuota
Gunakan query di Laravel saat user booking atau cancel:
// Kurangi kuota
DB::table('kuota_harian')
->where('tanggal', today())
->increment('kuota_terpakai');
// Tambah kuota (misal user batal)
DB::table('kuota_harian')
->where('tanggal', today())
->decrement('kuota_terpakai');
Atau validasi dulu:
$kuota = DB::table('kuota_harian')->where('tanggal', today())->first();
if ($kuota->kuota_terpakai < $kuota->kuota) {
// lanjutkan booking
}
🔄 Ringkasan
Fitur | Laravel | MySQL |
---|---|---|
Reset Harian | ✅ Lebih fleksibel | ❌ Kurang fleksibel |
Modifikasi Kuota | ✅ Sangat cocok | ❌ Sulit dan kaku |
📌 Rekomendasi
- Gunakan Laravel Scheduler untuk reset harian.
- Gunakan query Laravel untuk manipulasi kuota.
- Gunakan tabel kuota_harian per tanggal agar fleksibel.