// 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, ...]);
}
}
Database'deki mevcut kayıt:
$existingSettings['auth_subscription_auth_subscription']
Layout JSON'dan gelen key:
$key = 'auth_subscription'
Kontrol:
isset($existingSettings['auth_subscription']) → FALSE!
Sonuç:
"YENİ KAYIT oluştur" dalına giriyor
Database UNIQUE constraint:
Duplicate entry 'auth_subscription' for key 'settings_key_unique'
→ Laravel sessizce hata görmezden geliniyor!
Sonuç:
Hiçbir güncelleme yapılmıyor!
// 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;
}
-- 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!