🔴 Subscription Ayarları - Sorun Analizi

Değişikliklerin görünmemesi ve database kayıt sorunları
📅 2025-12-05 🎯 Tenant: muzibu.com (Tenant 1001) ⚙️ SettingManagement Modülü

🚨 Tespit Edilen Problemler

Problem 1

Varsayılan değerler görünmüyor

Form yüklendiğinde select ve number alanları boş

💾

Problem 2

Değişiklikler kayıt olmuyor

Save işlemi başarılı görünüyor ama DB ye yazılmıyor

🔄

Problem 3

Sayfa yenilemede kaybolma

F5 sonrası yeni değerler görünmüyor

🏗️ Sistem Mimarisi (Multi-Tenant)

Database Dağılımı

📊 Central DB (tuufi_4ekim)

settings

Ayar tanımları (label, type, options, default_value)

settings_groups

Grup tanımları + Layout JSON

settings_values

Sadece Tenant 1 (Central) için değerler

📊 Tenant DB (tenant_muzibu_1528d0)

settings_values

Tenant 1001 için değerler (sadece 3 kayıt var!)

Subscription ayarları YOK!

Setting ID 211, 212 için hiç kayıt yok

🔍 Database İçerik Dökümü

Central DB:

settings (211, 212) → Tanımlar ✓
settings_groups (23) → Layout ✓
settings_values → Tenant 1001 için YOK!

Tenant DB (muzibu):

settings_values → Sadece 3 kayıt
ID 1: setting_id=1 (site_name)
ID 2: setting_id=90
ID 3: setting_id=91
Setting 211, 212 → KAYIT YOK!

🔬 Kod Akışı Analizi

1

mount() - Sayfa Yüklendiğinde

Yapılan:

1. Settings çekiliyor (Setting::where('group_id', 23)->get())
2. Her setting için SettingValue::where('setting_id', X)->first()
3. Value varsa → value, yoksa → default_value
4. $this->values[$settingId] = finalValue

🚨 Problem:

Setting ID 211, 212 için SettingValue YOK!
→ default_value kullanılmalı
→ Ancak Blade template default_value göstermiyor!
→ Select placeholder="Seçiniz" boş kalıyor
2

Blade Template - Form Rendering

select.blade.php (Satır 46-58):

@php // Mevcut değeri belirle if(isset($values[$fieldName])) { $fieldValue = $values[$fieldName]; ← BU ÇALIŞIYOR } elseif(isset($settings) && is_object($settings)) { $cleanFieldName = str_replace('setting.', '', $fieldName); $fieldValue = $settings[$cleanFieldName] ?? $defaultValue; ← BU ÇALIŞMIYOR } else { $fieldValue = $defaultValue; ← BU ÇALIŞMIYOR } // values için varsayılan değeri ayarla if (!isset($values[$fieldName])) { $values[$fieldName] = $fieldValue; ← BU ÇALIŞMIYOR (Livewire wire:model.defer) } @endphp

🚨 Sorun:

1. $values[$fieldName] key olarak 'auth_subscription' kullanılıyor

2. Ancak mount() içinde $values[$settingId] → numeric key (211, 212)

3. String key ile numeric key EŞLEŞMIYOR!

4. Blade: isset($values['auth_subscription'])FALSE

5. Sonuç: $fieldValue hiç ayarlanmıyor → SELECT BOŞ!

3

save() - Kaydetme İşlemi

ValuesComponent::save() (Satır 306-454):

foreach ($this->values as $settingId => $value) { // String key'leri filtrele (sadece numeric ID'leri işle) if (!is_numeric($settingId)) { continue; ← BU ATLIYOR! } $setting = Setting::find($settingId); ... $settingValue = SettingValue::updateOrCreate( ['setting_id' => $settingId], ['value' => $value] ); }

🚨 Sorun:

1. Layout form elementi wire:model.defer="values.auth_subscription" kullanıyor

2. Değişiklik yapınca: $values['auth_subscription'] = '1'

3. Ancak save() içinde: if (!is_numeric($settingId)) continue;

4. String key ATLANIYOR! → Database'e hiç yazılmıyor!

4

updatedValues() - Değer Değişikliği

ValuesComponent::updatedValues() (Satır 67-102):

public function updatedValues($value, $key) { // String key ise numeric ID'ye çevir ve sync et if (!is_numeric($key)) { $setting = Setting::where('key', $key)->first(); ← BU ÇALIŞMIYOR! if ($setting) { $numericKey = $setting->id; $this->values[$numericKey] = $value; ← İKİLİ KEY $this->values[$key] = $value; } } }

🚨 Kritik Problem:

1. Layout form: name="auth_subscription"

2. Ancak Setting key: "auth_subscription_auth_subscription" (Prefix eklenmiş!)

3. Setting::where('key', 'auth_subscription')NULL!

4. Numeric key sync ÇALIŞMIYOR!

5. Sonuç: Değer sadece string key'de kalıyor, save() atlanıyor!

🎯 Kök Nedenler (Root Causes)

1️⃣

Setting Key Mismatch (Eşleşmeme)

Layout JSON:

name: "auth_subscription"

Database (settings tablosu):

key: "auth_subscription_auth_subscription"

→ Bu yüzden Setting::where('key', 'auth_subscription')->first() → NULL!

2️⃣

Dual Key System Karmaşası

Sistem hem numeric ID hem string key kullanıyor:

  • $values[211] → mount() tarafında numeric key
  • $values['auth_subscription'] → Layout form tarafında string key
  • İki key birbiriyle senkronize olmuyor!
3️⃣

Blade Template Default Value Sorunu

select.blade.php içinde:

1. $values[$fieldName] kontrol ediliyor

2. Yoksa $settings[$cleanFieldName] kontrol ediliyor

3. Ancak $settings bir Collection veya array değil, başka bir yapı!

4. is_object($settings) kontrolü yanlış çalışıyor

→ Sonuç: default_value hiç kullanılmıyor!

4️⃣

save() String Key Filtreleme

if (!is_numeric($settingId)) continue;

→ Bu satır string key'leri atlıyor!

→ Layout form'daki değişiklikler database'e yazılmıyor!

🔄 Sistemde İzlenen Akış

Sayfa Yükleme

1️⃣ mount() çalışıyor

→ Settings çekiliyor (ID: 211, 212)

→ SettingValue sorgusu: NULL (kayıt yok)

$values[211] = 'disabled' (default_value)

$values[212] = '1' (default_value)

Blade Render

2️⃣ select.blade.php çalışıyor

$fieldName = 'auth_subscription' (Layout JSON'dan)

→ Kontrol: isset($values['auth_subscription']) → FALSE!

→ Fallback kontrol başarısız

→ SELECT BOŞ GÖRÜNÜYOR!

Kullanıcı Değişiklik Yapıyor

3️⃣ Select'ten "Açık" seçiliyor

→ wire:model.defer: $values['auth_subscription'] = '1'

→ updatedValues() tetikleniyor

Setting::where('key', 'auth_subscription') → NULL!

→ Sync ÇALIŞMIYOR!

→ Değer sadece: $values['auth_subscription'] = '1'

Kaydet Butonu

4️⃣ save() çalışıyor

→ foreach: $settingId = 'auth_subscription'

if (!is_numeric($settingId)) continue;

→ String key ATLANIYOR!

→ Database'e HİÇ YAZILMIYOR!

Sayfa Yenileme (F5)

5️⃣ mount() tekrar çalışıyor

→ SettingValue sorgusu: NULL (hala yok!)

$values[211] = 'disabled' (default_value)

→ Değişiklikler KAYBOLDU!

📋 Özet

Ana Sorunlar

Setting Key Uyumsuzluğu

Layout JSON: auth_subscription vs Database: auth_subscription_auth_subscription

Dual Key Sync Hatası

Numeric key (211) ile string key ('auth_subscription') senkronize olmuyor

Default Value Render Hatası

Blade template default_value'yu gösteremiyor

Save Filtreleme Hatası

String key'ler save() içinde atlanıyor