🐛 Form Builder Bug - Key Eşleştirme Hatası

"Kaydet" dediğinde neden düzeltmiyor?
📅 2025-12-05 🐛 Form Builder Logic Bug 🔧 syncSettingsFromLayout()

🔴 Form Builder Bug'ı

Satır 87: Yanlış Key Kontrolü

FormBuilderComponent.php (Satır 73-103)
// Mevcut settings'leri al $existingSettings = Setting::where('group_id', $groupId) ->get() ->keyBy('key'); // Layout'tan gelen ayarlar foreach ($extractedSettings as $settingData) { $key = $settingData['name']; // "auth_subscription" // ❌ BUG: Yanlış key ile kontrol ediyor! if (isset($existingSettings[$key])) { // Güncelle } else { // ❌ Yeni oluştur (ama UNIQUE constraint var!) Setting::create(['key' => $key, ...]); } }

Ne Oluyor?

1️⃣

Database'deki mevcut kayıt:

$existingSettings['auth_subscription_auth_subscription']
2️⃣

Layout JSON'dan gelen key:

$key = 'auth_subscription'
3️⃣

Kontrol:

isset($existingSettings['auth_subscription']) → FALSE!
4️⃣

Sonuç:

"YENİ KAYIT oluştur" dalına giriyor

5️⃣

Database UNIQUE constraint:

Duplicate entry 'auth_subscription' for key 'settings_key_unique'

→ Laravel sessizce hata görmezden geliniyor!

6️⃣

Sonuç:

Hiçbir güncelleme yapılmıyor!

🔧 Doğru Çözüm

Çözüm 1: Fuzzy Matching Ekle (ÖNERİLEN)

// Satır 87'yi değiştir: if (isset($existingSettings[$key])) { // Exact match bulundu $setting = $existingSettings[$key]; } elseif ($fuzzyMatch = $this->findFuzzyMatch($existingSettings, $key)) { // Fuzzy match bulundu (prefix, suffix toleransı) $setting = $fuzzyMatch; // Key'i düzelt! $setting->update(['key' => $key]); \Log::info("Setting key düzeltildi: {$fuzzyMatch->key} → {$key}"); } else { // Gerçekten yeni kayıt Setting::create([...]); } // Yeni metod: protected function findFuzzyMatch($existingSettings, $key) { // 1. Prefix/suffix içeren key'leri ara foreach ($existingSettings as $existingKey => $setting) { if (str_contains($existingKey, $key)) { return $setting; } } // 2. Partial match foreach ($existingSettings as $existingKey => $setting) { similar_text($existingKey, $key, $percent); if ($percent > 60) { return $setting; } } return null; }

Çözüm 2: Hızlı Fix (Manuel)

-- Database'deki key'leri düzelt: UPDATE settings SET `key` = 'auth_subscription' WHERE id = 211; UPDATE settings SET `key` = 'auth_device_limit' WHERE id = 212; -- Sonra form builder'da "Kaydet" → Şimdi eşleşecek!