4.3 KiB
4.3 KiB
Troubleshooting Guide
Error: "Unknown column 't.amount' in 'SELECT'"
Kemungkinan Penyebab:
- OPcache belum di-clear - PHP masih menggunakan file lama
- Struktur database berbeda - Kolom
amountmungkin tidak ada atau nama berbeda - File belum ter-update - Meskipun sudah
git pull, file mungkin belum benar-benar ter-update
Solusi di Production
Step 1: Clear OPcache
# Di production server
cd /www/wwwroot/api.btekno.cloud/api
# Clear OPcache via PHP CLI
php -r "opcache_reset();"
# Atau restart PHP-FPM
systemctl restart php-fpm
# atau
/www/server/php/83/bin/php-fpm restart
Step 2: Verify File Sudah Ter-update
# Cek apakah file sudah benar-benar ter-update
grep -n "COALESCE(t.amount, 0)" src/Modules/Retribusi/Summary/DailySummaryService.php
# Harus muncul di line 46 dan 61
# Line 46: COALESCE(t.amount, 0) as tariff_amount
# Line 61: COALESCE(t.amount, 0)
Step 3: Verify Struktur Database
# Login ke MySQL
mysql -u sql_retribusi -p sql_retribusi
# Cek struktur tabel tariffs
DESCRIBE tariffs;
# Harus ada kolom:
# - location_code
# - gate_code
# - category
# - amount <-- INI HARUS ADA!
Step 4: Test Query Manual
# Di MySQL client
mysql -u sql_retribusi -p sql_retribusi < bin/verify_query.sql
# Atau jalankan query ini manual:
SELECT
DATE(e.event_time) as summary_date,
e.location_code,
e.gate_code,
e.category,
COUNT(*) as total_count,
COALESCE(t.amount, 0) as tariff_amount
FROM entry_events e
INNER JOIN locations l ON e.location_code = l.code AND l.is_active = 1
INNER JOIN gates g ON e.location_code = g.location_code
AND e.gate_code = g.gate_code
AND g.is_active = 1
LEFT JOIN tariffs t ON e.location_code = t.location_code
AND e.gate_code = t.gate_code
AND e.category = t.category
WHERE DATE(e.event_time) = CURDATE()
GROUP BY
DATE(e.event_time),
e.location_code,
e.gate_code,
e.category,
COALESCE(t.amount, 0)
LIMIT 5;
Step 5: Test Script Lagi
cd /www/wwwroot/api.btekno.cloud/api
php bin/daily_summary.php 2025-12-16
Cek Database Lokal
Step 1: Setup .env (jika belum)
# Copy .env.example ke .env
cp .env.example .env
# Edit .env, isi dengan database lokal:
DB_HOST=localhost
DB_NAME=sql_retribusi
DB_USER=sql_retribusi
DB_PASS=your_password_here
Step 2: Jalankan Script Check Database
php bin/check_database.php
Step 3: Verify Query di Lokal
# Via MySQL client
mysql -u sql_retribusi -p sql_retribusi < bin/verify_query.sql
Step 4: Test Daily Summary di Lokal
php bin/daily_summary.php 2025-12-16
Apply Migrations
Migration yang Tersedia:
001_create_audit_logs.sql- Tabel audit_logs002_create_hourly_summary.sql- Tabel hourly_summary003_create_realtime_events.sql- Tabel realtime_events
Cara Apply (Lokal):
# Via MySQL command line
mysql -u sql_retribusi -p sql_retribusi < migrations/001_create_audit_logs.sql
mysql -u sql_retribusi -p sql_retribusi < migrations/002_create_hourly_summary.sql
mysql -u sql_retribusi -p sql_retribusi < migrations/003_create_realtime_events.sql
Cara Apply (Production):
# Di production server
cd /www/wwwroot/api.btekno.cloud/api
# Backup dulu!
mysqldump -u sql_retribusi -p sql_retribusi > backup_$(date +%Y%m%d_%H%M%S).sql
# Apply migration
mysql -u sql_retribusi -p sql_retribusi < migrations/001_create_audit_logs.sql
mysql -u sql_retribusi -p sql_retribusi < migrations/002_create_hourly_summary.sql
mysql -u sql_retribusi -p sql_retribusi < migrations/003_create_realtime_events.sql
Jika Masih Error
Cek Log Error Detail:
# Di production
cd /www/wwwroot/api.btekno.cloud/api
php bin/daily_summary.php 2025-12-16 2>&1 | tee error.log
Cek Apakah Tabel Tariffs Ada:
-- Di MySQL
SHOW TABLES LIKE 'tariffs';
SELECT COUNT(*) FROM tariffs;
Cek Apakah Ada Data di Entry Events:
-- Di MySQL
SELECT COUNT(*) FROM entry_events WHERE DATE(event_time) = CURDATE();
Quick Fix (Jika OPcache Issue)
# Di production, restart PHP-FPM
systemctl restart php-fpm
# Atau via aaPanel
# PHP → PHP-FPM → Restart
# Lalu test lagi
cd /www/wwwroot/api.btekno.cloud/api
php bin/daily_summary.php 2025-12-16