Proje: Okul Platform · Hub: Okul Platform — Incidents
Semptom
panel/checkoutlistesinde Firma Adı ve Yetkili Ad Soyad sütunları boş gözüküyor.panel/checkout/{id}detay sayfası 500 hatası:Undefined array key "products"(show.blade.php:19).
Root cause
checkouts tablosu, okul-api ile ortak schema’ya geçişle birlikte yeniden yapılandırılmış (saha checkout migration’ının yan etkisi):
| Eski (panel kodunun beklediği) | Yeni (gerçek schema) |
|---|---|
firm_name (column) | customer_id → customers.firm_name (ilişki) |
recipient_full_name | full_name |
recipient_email | email |
items['products'] (JSON) | items['school_products'] |
items['products'][i]['location_name'] | items['school_products'][i]['city_name'] |
items['products'][i]['price'] (yıllık) | items['school_products'][i]['monthly_product_price'] (aylık) |
Panel’in App\Models\Checkout’unda customer() ilişkisi yoktu, fillable hâlâ eski kolon adlarını barındırıyor; service select(['checkouts.*']) yapıp eski kolonları çekemiyor; blade’ler bu eski kolonlara {{$data->firm_name}} benzeri erişim deniyor → silent boş veya Undefined array key.
Why: Saha modülü için okul-api admin/checkouts/* üzerine taşıma yapıldı (bkz. 2026-05-06-saha-checkout-okulcom-api-gecisi). API ortak Checkout modeli schema’sını dayatıyor ama panel’in kendi blade/service kodu güncellenmemiş.
Çözüm
App\Models\Checkout’acustomer()BelongsTo Customer ilişkisi eklendi.App\Service\Checkout\CheckoutService::getAll→->with('customer:id,name,firm_name')eager-load- search filter
whereHas('customer', firm_name|name)+checkouts.full_name(eskifirm_name/recipient_full_namejoin-liwherekaldırıldı)
resources/views/panel/checkout/list.blade.php:- Firma sütunu:
$data->customer?->firm_name ?: $data->customer?->name ?: '—' - Yetkili sütunu:
$data->full_name ?: '—' firm_namesıralama header’ı kaldırıldı (joined relation, sortable değil)
- Firma sütunu:
resources/views/panel/checkout/show.blade.php:items['school_products'](eskiproductsanahtarına fallback bırakıldı)- Satır içi alanlar:
school_name/city_name/product_name/monthly_product_price(eskilocation_name/price/12fallback) - Üst başlıkta
customer.firm_name|name,full_name,email,phone(yeni kolonlardan)
How to apply (gelecekte benzer durumda)
- “Bir liste sayfasında alanlar boş” şikayeti gelirse, önce DB schema’sını doğrula (
Schema::getColumnListing); panel kodunda hâlâ kalkmış kolonlara referans olabilir. items(JSON) gibi cast edilen kolonlar API tarafında güncellendiyse, web blade tarafı da güncellenmeli; defansif?? eskiKeyfallback’leri ile geriye dönük uyum sağlanır.- okul-api ile ortak Eloquent kullanımları için: web app’in kendi modelini API’nin Checkout modeliyle senkronize tut (en azından ilişkiler ve fillable).
Related
- 2026-05-06-saha-checkout-okulcom-api-gecisi — bu bug’ın oluşmasına yol açan büyük geçiş
- 2026-04-21-collection-filter-key-preservation — başka bir “schema uyumsuzluk” tarzı incident