Mutators & Casting
Laravel Eloquent, veritabanı işlemlerini kolaylaştıran bir ORM (Object-Relational Mapping) kütüphanesidir. Eloquent, veritabanı tablolarını PHP sınıfları ile eşleştirerek, veritabanı işlemlerini nesne yönelimli bir şekilde gerçekleştirmenizi sağlar.
Eloquent’in sağladığı bir diğer özellik ise “Mutators” ve “Casting” özellikleridir. Bu özellikler sayesinde, veritabanındaki verileri istediğiniz şekilde dönüştürebilirsiniz.
Mutators
Eloquent Mutators, model sınıflarında tanımlanan özel metotlardır. Bu metotlar, belirli özelliklere sahip modellerin verilerini, veritabanına kaydederken veya veritabanından okurken değiştirmenize olanak tanır.
Örneğin, bir kullanıcının adını kaydetmek istediğinizi varsayalım. Ancak ad alanında girilen verilerin baş harflerinin büyük olmasını istiyorsunuz. Bu durumda, kullanıcının adını kaydederken, setNameAttribute gibi bir mutator metodu oluşturabilirsiniz:
class User extends Model
{
public function setNameAttribute($value)
{
$this->attributes['name'] = ucfirst($value);
}
}Bu metot, kullanıcının adını kaydederken, ucfirst fonksiyonu kullanarak adın ilk harfini büyük harfe çevirir. Örneğin, eğer kullanıcının adı "john" ise, bu metot adı "John" olarak kaydedecektir.
Get Ömer Faruk Çetin’s stories in your inbox
Join Medium for free to get updates from this writer.
Aynı şekilde, veritabanından okuma yaparken de mutatorları kullanabilirsiniz. Örneğin, bir kullanıcının yaşını 10 yıl daha genç göstermek istediğinizi varsayalım. Bu durumda, getAgeAttribute gibi bir mutator metodu oluşturabilirsiniz:
class User extends Model
{
public function getAgeAttribute($value)
{
return $value - 10;
}
}Bu metot, kullanıcının yaşını okurken, 10 yıl düşürerek geri döndürür.
Casting
Eloquent Casting, veritabanından okunan verilerin, belirli bir veri türüne dönüştürülmesini sağlar. Bu özellik sayesinde, veritabanındaki verileri PHP’de kullanımı daha kolay olan türlere dönüştürebilirsiniz.
Örneğin, bir veritabanında bir tarih alanı olduğunu varsayalım. Bu alan, varsayılan olarak bir string olarak saklanır. Ancak bu tarihi, DateTime nesnesi olarak kullanmak istiyorsunuz. Bu durumda, model sınıfınızda date özelliği için bir dönüştürücü metot tanımlayabilirsiniz:
class Post extends Model
{
protected $casts = [
'published_at' => 'datetime',
];Eloquent’te Casting yapmak istediğimiz zaman, özellikle veritabanında belirli bir formatta saklanan bir veriyi model sınıfında bir başka formatta kullanmak istediğimizde kullanılır. Örneğin, bir veritabanı sütunu varsayılan olarak bir string olarak saklanıyor olsa da, biz bu veriyi model sınıfında DateTime nesnesi olarak kullanmak isteyebiliriz.
Bunun için, model sınıfımızda $casts adında bir özellik kullanırız. Bu özellik, veritabanından alınan değerlerin dönüştürülmesi için kullanılacak türleri belirlememize olanak tanır. Ayrıca, model sınıfında herhangi bir özellik için mutator oluşturarak, veriyi istediğimiz şekilde işleyebiliriz.
Örneğin, bir “Product” modelimiz olsun ve bu modelin “price” özelliği veritabanında bir string olarak saklansın. Ancak, bu özelliği model sınıfında bir float olarak kullanmak istiyoruz. Bunu yapmak için, model sınıfımızda $casts özelliğini aşağıdaki gibi tanımlayabiliriz:
class Product extends Model
{
protected $casts = [
'price' => 'float'
];
public function getPriceAttribute($value)
{
return $value / 100;
}
public function setPriceAttribute($value)
{
$this->attributes['price'] = $value * 100;
}
}Yukarıdaki örnekte, $casts özelliği ile “price” özelliğinin bir float türünde saklanacağını belirtiyoruz. Ayrıca, getPriceAttribute() metodu ile “price” özelliğine erişildiğinde, değeri veritabanından okurken 100'e böleriz. setPriceAttribute() metodu ile “price” özelliğine atama yaparken, değeri 100 ile çarparak kaydederiz.
Bu sayede, “price” özelliği artık model sınıfımızda bir float olarak kullanılabilir. Ayrıca, veritabanından okurken veya veritabanına kaydederken, değerimizi dönüştürerek işleyebiliriz.





