umutcankarce Bu Laravel'deki eski accessor tanımlama.
(Kodunuzda if(self::ACCOUNT_TYPE_PERSON) kısmı mantıklı değildi. account_type isimli bir alana bakmaya çalıştığınızı düşündüğüm için kodu düzenledim.)
public function getCustomerGroupAttribute()
{
return match ($this->account_type) {
self::ACCOUNT_TYPE_PERSON => "Bireysel Müşteri",
self::ACCOUNT_TYPE_COMPANY => "Kurumsal Müşteri",
default => "Bilinmeyen Müşteri Tipi",
};
}
Bu şekilde tanımlanmış bir accessor'e $customer->customer_group
şeklinde erişiyorsunuz. Yöntem adından get ve Attribute kelimelerini çıkarıyorsunuz, geriye kalan kelime öbeğini snake case yazıyorsunuz. Yani getcustomer_groupAttribute şeklinde. Bu 3 sene önce kullanılıyordu. Bu eski bilgiye nereden ulaştınız bilmiyorum. Laravel 9+ bir sürüm kullanıyorsanız takip ettiğiniz kaynak her neyse çok eski.
Yeni kullanım şekli ise şu şekilde:
https://laravel.com/docs/11.x/eloquent-mutators#defining-an-accessor
protected function customerGroup(): Attribute
{
return Attribute::get(function ($value, $attributes) {
if (!isset($attributes['account_type'])) {
return null;
}
return match ($attributes['account_type']) {
self::ACCOUNT_TYPE_PERSON => "Bireysel Müşteri",
self::ACCOUNT_TYPE_COMPANY => "Kurumsal Müşteri",
default => "Bilinmeyen Müşteri Tipi",
};
});
}
Yine aynı şekilde buna da $customer->customer_group
şeklinde erişiyorsunuz.
Bunu $appends[] dizisine eklerseniz model JSON ya da array'e serialize edilirken bu alan da eklenir.
Burada önemli bir nokta daha var; tabloda customer_group şeklinde bir alan olmaması gerekiyor, varsa accessor adını değiştirmeniz lazım. Aynı isimde hem tablodan gelen property hem de accessor olamaz.