# Troubleshooting: Cambio de DB No Refleja Cambios

## 🔍 Problema

Al cambiar la DB en `.env`, los cambios no se reflejan en el sitio.

## ✅ Soluciones

### 1. Limpiar Todos los Caches (Más Común)

```bash
# Limpiar todos los caches
php artisan config:clear
php artisan cache:clear
php artisan view:clear

# Caches específicos por proyecto (demo + módulos + site)
php artisan tinker --execute="\App\Services\SiteConfigService::clearCache(); \App\Services\CdSystemConfigService::clearCache();"
```

**O todo junto:**
```bash
php artisan config:clear && php artisan cache:clear && php artisan view:clear && php artisan tinker --execute="\App\Services\SiteConfigService::clearCache(); \App\Services\CdSystemConfigService::clearCache();"
```

**Nota:** La configuración de **demo y módulos** (`cd-system`) también se cachea por DB. Si al cambiar de proyecto el header/footer o los módulos no coinciden con la nueva DB, incluir `CdSystemConfigService::clearCache()` como arriba.

### 1.1 Activar/Desactivar módulos desde phpMyAdmin

Los módulos se controlan por la **base de datos** del proyecto. En la tabla `settings` las claves son:

- `cd-system.modules.{nombre}.active` → `1` = activo, `0` = inactivo (ej.: `cd-system.modules.blog.active`)
- `cd-system.modules.{nombre}.navigation.header` / `.footer` → `1` / `0` para mostrar en header/footer

Si cambias estos valores en phpMyAdmin y el header o las rutas siguen mostrando el módulo como activo, la app está usando **caché** (24 h). Para que el cambio se aplique de inmediato:

**Recomendado (limpia solo la caché de cd-system):**

```bash
php artisan cd-system:clear-config-cache
```

**Si sigue sin aplicarse, limpiar toda la caché:**

```bash
php artisan cd-system:clear-config-cache --all
```

O manualmente:

```bash
php artisan config:clear && php artisan cache:clear
```

**Importante:** Comprueba que estás editando la **misma base de datos** que usa la app. En phpMyAdmin revisa el nombre de la BD; en el proyecto debe coincidir con `DB_DATABASE` en tu `.env`. Si editas otra BD, los cambios no se verán.

Tras limpiar la caché, recarga la página (F5 o Ctrl+Shift+R). El header/footer y las rutas respetarán el estado guardado en la DB.

### 2. Verificar que la DB Está Correcta

```bash
# Verificar DB en .env
grep DB_DATABASE .env

# Verificar DB que Laravel está usando
php artisan tinker --execute="echo config('database.connections.mysql.database');"
```

### 3. Verificar que los Datos Están en la DB

```bash
# Ver cuántos settings hay
php artisan tinker --execute="echo \Illuminate\Support\Facades\DB::table('settings')->where('key', 'like', 'site.%')->count();"

# Ver datos específicos
php artisan tinker --execute="\$dbConfig = \App\Services\SiteConfigService::getSiteConfigFromDb(); echo 'Name: ' . (\$dbConfig['name'] ?? 'no encontrado');"
```

### 4. Reiniciar el Servidor

Si usas `php artisan serve`:
```bash
# Detener (Ctrl+C) y reiniciar
php artisan serve
```

Si usas XAMPP/Apache:
```bash
# Reiniciar Apache desde XAMPP
```

### 5. Verificar que SiteConfigServiceProvider Está Registrado

```bash
# Verificar en config/app.php
grep SiteConfigServiceProvider config/app.php
```

Debería aparecer:
```php
App\Providers\SiteConfigServiceProvider::class,
```

### 6. Verificar Cache del Navegador

- Limpiar cache del navegador (Ctrl+Shift+Delete)
- O probar en modo incógnito
- O hacer hard refresh (Ctrl+Shift+R o Cmd+Shift+R)

## 🔄 Proceso Completo de Cambio de DB

### Paso 1: Cambiar DB

```bash
# Editar .env
DB_DATABASE=bewpro-muma
```

### Paso 2: Limpiar Caches

```bash
php artisan config:clear
php artisan cache:clear
php artisan view:clear
php artisan tinker --execute="\App\Services\SiteConfigService::clearCache();"
```

### Paso 3: Verificar

```bash
php artisan tinker --execute="echo 'DB: ' . config('database.connections.mysql.database') . PHP_EOL; echo 'Name: ' . config('site.name') . PHP_EOL;"
```

### Paso 4: Recargar Navegador

- Hard refresh (Ctrl+Shift+R)
- O limpiar cache del navegador

## ⚠️ Problemas Comunes

### Problema 1: Cache de 24 Horas

**Síntoma:** Los datos no cambian aunque cambies la DB

**Solución:**
```bash
# Limpiar cache manualmente
php artisan tinker --execute="\App\Services\SiteConfigService::clearCache();"
```

### Problema 2: Service Provider No Se Ejecuta

**Síntoma:** Los datos no se cargan desde la DB

**Solución:**
1. Verificar que está registrado en `config/app.php`
2. Limpiar cache de configuración: `php artisan config:clear`
3. Reiniciar servidor

### Problema 3: DB No Tiene Datos

**Síntoma:** `config('site.name')` está vacío

**Solución:**
```bash
# Verificar que la DB tiene datos
php artisan tinker --execute="echo \Illuminate\Support\Facades\DB::table('settings')->where('key', 'like', 'site.%')->count();"

# Si está vacío, ejecutar seeders
php artisan db:seed --class=SiteDataSeeder
```

## ✅ Comando Rápido de Solución

```bash
# Todo en uno: cambiar DB y limpiar caches
# 1. Cambiar DB en .env manualmente
# 2. Ejecutar:
php artisan config:clear && php artisan cache:clear && php artisan view:clear && php artisan tinker --execute="\App\Services\SiteConfigService::clearCache();" && echo "✅ Listo - Recarga el navegador con Ctrl+Shift+R"
```

## 🎯 Verificación Final

Después de limpiar caches, verificar:

```bash
php artisan tinker --execute="
echo 'DB: ' . config('database.connections.mysql.database') . PHP_EOL;
echo 'Name: ' . config('site.name') . PHP_EOL;
echo 'URL: ' . config('site.url') . PHP_EOL;
echo 'GA: ' . config('site.google_analytics.tracking_id') . PHP_EOL;
"
```

Si los valores son correctos pero no se ven en el navegador:
- Limpiar cache del navegador
- Hard refresh (Ctrl+Shift+R)
- Probar en modo incógnito
