DUYURU
Sizlere daha iyi ve güvenli hizmet sunabilmek amacıyla, Yazılım ve Sistem Kullanım Koşullarımızı güncelliyoruz. Yapılacak güncelleme ile yazılım, sistem kullanımı, bakım, destek ve hizmet süreçlerimiz daha düzenli ve güvenli şekilde yürütülecektir. Sizlere daha iyi ve güvenli hizmet sunabilmek amacıyla, Yazılım ve Sistem Kullanım Koşullarımızı güncelliyoruz. Yapılacak güncelleme ile yazılım, sistem kullanımı, bakım, destek ve hizmet süreçlerimiz daha düzenli ve güvenli şekilde yürütülecektir. Sizlere daha iyi ve güvenli hizmet sunabilmek amacıyla, Yazılım ve Sistem Kullanım Koşullarımızı güncelliyoruz. Yapılacak güncelleme ile yazılım, sistem kullanımı, bakım, destek ve hizmet süreçlerimiz daha düzenli ve güvenli şekilde yürütülecektir. Sizlere daha iyi ve güvenli hizmet sunabilmek amacıyla, Yazılım ve Sistem Kullanım Koşullarımızı güncelliyoruz. Yapılacak güncelleme ile yazılım, sistem kullanımı, bakım, destek ve hizmet süreçlerimiz daha düzenli ve güvenli şekilde yürütülecektir.
Pzt-Cmt 09:00-18:00
Laravel Mass Assignment Exception Hatası Nasıl Çözülür?
Laravel Rehber

Laravel Mass Assignment Exception Hatası Nasıl Çözülür?

Laravel Mass Assignment Exception hatası, bir Model üzerinden toplu veri ekleme veya güncelleme yapılırken hangi alanların doldurulmasına izin verildiğinin doğru yapılandırılmaması nedeniyle ortaya çıkar.

9 dk okuma · · Güncellendi: · 4 okundu
İçindekiler

Laravel Mass Assignment Exception Hatası Nasıl Çözülür?

Laravel Mass Assignment Exception hatası, bir Model üzerinden toplu veri ekleme veya güncelleme yapılırken hangi alanların doldurulmasına izin verildiğinin doğru yapılandırılmaması nedeniyle ortaya çıkar. Özellikle create(), update() ve fill() kullanımlarında karşılaşılır. Bu rehberde fillable, guarded ve Laravel Model güvenliği üzerinden Mass Assignment sorunlarını adım adım inceleyeceğiz.

1. Mass Assignment Nedir?

Mass Assignment, bir Model'e birden fazla alanın aynı anda dizi üzerinden aktarılmasıdır.
Örneğin:
Product::create($request->all());
Bu işlemde gelen alanlar doğrudan Model'e aktarılmaya çalışılır. Laravel, güvenlik nedeniyle hangi alanların toplu olarak doldurulabileceğini kontrol eder.

2. Mass Assignment Exception Nedir?

Model'de toplu veri girişine izin verilmeyen bir alan create(), fill() veya benzeri bir yöntemle gönderildiğinde Mass Assignment hatası oluşabilir.
Örneğin:
Product::create(['name' => 'Laptop', 'price' => 25000]);
Model gerekli alanları kabul edecek şekilde yapılandırılmamışsa hata alınabilir.
Hata mesajı genellikle şu yapıya benzer:
Add [name] to fillable property to allow mass assignment on [App\Models\Product].

3. $fillable Nedir?

$fillable, Laravel Model içerisinde toplu veri aktarımına izin verilen alanları belirtmek için kullanılır.
Örneğin:
protected $fillable = ['name', 'price', 'description'];
Bu yapı ile belirtilen alanlar create(), fill() ve uygun update() işlemlerinde toplu olarak atanabilir.

4. $fillable Nasıl Kullanılır?

Örneğin Product Model:
class Product extends Model
{
protected $fillable = ['name', 'price', 'description'];
}
Ardından:
Product::create($request->only(['name', 'price', 'description']));
kullanılabilir.
Burada yalnızca izin verilen alanların gönderilmesi daha kontrollü bir yapı oluşturur.

5. $guarded Nedir?

$guarded, toplu veri aktarımında korunması gereken alanları belirtir.
Örneğin:
protected $guarded = ['id'];
Bu yapı id alanını toplu atamaya karşı korurken diğer alanların atanmasına izin verir.

6. $fillable ve $guarded Aynı Anda Kullanılır mı?

Bir Model'de $fillable ve $guarded özelliklerinin birlikte kullanılması genellikle gereksizdir.
Örneğin:
protected $fillable = ['name', 'price'];
ve:
protected $guarded = ['id'];
gibi çakışabilecek yapıların yerine uygulamanın ihtiyacına göre bir yaklaşım seçmek daha anlaşılırdır.

7. $guarded = [] Kullanmak Güvenli mi?

Şu kullanım:
protected $guarded = [];
toplu atama korumasını kaldırır.
Bu nedenle özellikle kullanıcıdan gelen verilerin doğrudan Model'e aktarılması durumunda dikkatli olunmalıdır.
Örneğin:
Product::create($request->all());
gibi bir kullanımda istemeden hassas alanların da atanmasına yol açabilecek bir yapı oluşturulabilir.

8. $request->all() Kullanımına Dikkat Edin

Mass Assignment sorununu çözmek için:
Product::create($request->all());
kullanmak kolay görünse de güvenlik açısından iyi bir yaklaşım olmayabilir.
Bunun yerine:
Product::create($request->only(['name', 'price', 'description']));
gibi kontrollü veri aktarımı yapılabilir.

9. Laravel Validation ile Birlikte Kullanım

Veri doğrulama ve Mass Assignment birlikte kullanılabilir.
Örneğin:
$validated = $request->validate(['name' => 'required|string|max:255', 'price' => 'required|numeric']);
Ardından:
Product::create($validated);
kullanılabilir.
Böylece yalnızca doğrulanan alanların Model'e gönderilmesi sağlanır.

10. create() Kullanırken Mass Assignment Hatası

Şu kullanım:
Product::create(['name' => 'Laptop']);
Model'de name alanı toplu atamaya açık değilse hata oluşabilir.
Model:
protected $fillable = ['name'];
şeklinde düzenlenebilir.

11. update() Kullanırken Mass Assignment Hatası

Toplu güncelleme işlemlerinde de aynı koruma mekanizması geçerlidir.
Örneğin:
$product->update($validated);
kullanıyorsanız Model'in ilgili alanları toplu atamaya izin vermelidir.
Örneğin:
protected $fillable = ['name', 'price'];

12. fill() Kullanırken Mass Assignment

fill() yöntemi de toplu atama mekanizmasını kullanır.
Örneğin:
$product->fill(['name' => 'Yeni Ürün', 'price' => 1500]);
Ardından:
$product->save();
kullanılabilir.
Buradaki alanların Model tarafından toplu atamaya izin verilmiş olması gerekir.

13. forceFill() Nedir?

Laravel'de forceFill() kullanılarak Model'in mass assignment koruması bypass edilebilir.
Örneğin:
$product->forceFill(['name' => 'Laptop'])->save();
Bu yöntem dikkatli kullanılmalıdır. Çünkü normal $fillable korumasını devre dışı bırakır.
Kullanıcıdan gelen kontrolsüz veriler için tercih edilmemelidir.

14. Mass Assignment Güvenlik Riski Nedir?

Mass Assignment yalnızca bir Laravel hatası değildir. Yanlış yapılandırıldığında güvenlik problemi oluşturabilir.
Örneğin kullanıcıdan gelen veriler doğrudan:
User::create($request->all());
şeklinde işlenirse is_admin, role, status gibi hassas alanların da istemeden değiştirilmesi riski oluşabilir.
Bu nedenle hangi alanların toplu olarak atanabileceği açıkça belirlenmelidir.

15. User Model'de Mass Assignment

Örneğin:
protected $fillable = ['name', 'email', 'password'];
kullanılabilir.
Ancak:
is_admin
gibi yetkilendirme açısından hassas alanların kullanıcı tarafından gelen doğrulanmamış verilerle değiştirilmesine izin verilmemelidir.
Bu alanlar gerekiyorsa kontrollü ve ayrı bir işlemle yönetilmelidir.

16. Laravel Form Request ile Mass Assignment

Büyük projelerde Form Request kullanmak daha düzenli bir yapı oluşturabilir.
Örneğin:
$validated = $request->validated();
Ardından:
Product::create($validated);
kullanılabilir.
Böylece validation kuralları ile Model'e gönderilen veriler arasında daha kontrollü bir yapı kurulabilir.

17. Mass Assignment Hatasında Modeli Kontrol Edin

Hata aldığınızda öncelikle ilgili Model dosyasını açın.
Örneğin:
app/Models/Product.php
Ardından:
$fillable
veya:
$guarded
tanımlarını kontrol edin.
Hata mesajındaki alanın gerçekten toplu atamaya açık olup olmadığını kontrol edin.

18. Laravel Model'de Alan Adını Kontrol Edin

Veritabanındaki alan:
product_name
ise Controller'da:
name
göndermek farklı bir alandır.
Örneğin:
Product::create(['name' => 'Laptop']);
kullanıyorsanız Model ve migration içerisinde gerçekten name alanının bulunup bulunmadığını kontrol edin.
Mass Assignment hatası ile veritabanı kolon hatasını birbirine karıştırmamak gerekir.

19. Mass Assignment Sorununu Hızlı Çözme

Öncelikle Model'i kontrol edin:
protected $fillable = ['name', 'price', 'description'];
Ardından Controller'da:
$validated = $request->validate(['name' => 'required|string', 'price' => 'required|numeric', 'description' => 'nullable|string']);
ve:
Product::create($validated);
kullanabilirsiniz.
Bu yapı hem veri doğrulamasını hem de toplu atama kontrolünü daha düzenli hale getirir.

20. Laravel Mass Assignment İçin Hızlı Kontrol Listesi

Mass Assignment hatası aldığınızda şu sırayla ilerleyin:
app/Models/Product.php
$fillable kontrolü
$guarded kontrolü
Controller'daki create() veya update() kullanımı
Form Request validation
$request->all() kullanımı
Hassas alanların korunması
Gerekirse:
php artisan optimize:clear
Ardından uygulamayı tekrar test edin.

Sık Sorulan Sorular

1. Laravel Mass Assignment nedir? Birden fazla Model alanının dizi üzerinden aynı anda atanması işlemidir.
2. Laravel Mass Assignment Exception neden oluşur? Toplu olarak gönderilen alan Model tarafından atanabilir olarak tanımlanmadığında oluşabilir.
3. Laravel fillable nedir? Model'de toplu veri aktarımına izin verilen alanları belirleyen özelliktir.
4. Laravel guarded nedir? Toplu atamaya karşı korunacak alanları belirlemek için kullanılan Model özelliğidir.
5. fillable ve guarded birlikte kullanılmalı mı? Genellikle uygulamanın ihtiyacına göre bir yaklaşım seçmek daha anlaşılırdır.
6. Laravel $guarded = [] güvenli mi? Mass Assignment korumasını kaldırdığı için özellikle kullanıcı verilerinde dikkatli kullanılmalıdır.
7. Laravel $request->all() kullanmak güvenli mi? Gelen tüm alanları içerebileceğinden kontrollü alan seçimi veya doğrulanmış veri kullanmak daha güvenlidir.
8. Laravel create() Mass Assignment hatası neden verir? create() toplu atama kullandığı için Model'in ilgili alanlara izin vermesi gerekir.
9. Laravel update() Mass Assignment hatası verir mi? Evet. Toplu update() işlemlerinde de Mass Assignment koruması uygulanır.
10. Laravel fill() Mass Assignment kullanır mı? Evet. fill() toplu atama mekanizmasına tabidir.
11. Laravel forceFill() nedir? Model'in Mass Assignment korumasını bypass ederek alanların doldurulmasını sağlayan yöntemdir.
12. forceFill() kullanmak güvenli mi? Kontrollü ve güvenilir verilerle kullanılmalıdır. Kullanıcıdan gelen kontrolsüz veriler için dikkat edilmelidir.
13. Laravel'de is_admin alanı fillable olmalı mı? Kullanıcıdan gelen toplu verilerle yönetilecek bir alan olarak doğrudan açılması güvenlik açısından dikkat gerektirir.
14. Laravel validation Mass Assignment sorununu çözer mi? Validation verilerin doğrulanmasını sağlar; Model'in $fillable veya $guarded yapılandırması ayrıca doğru olmalıdır.
15. Laravel Form Request Mass Assignment ile kullanılabilir mi? Evet. validated() sonucu elde edilen kontrollü veriler Model'e aktarılabilir.
16. Laravel User Model'de fillable nasıl kullanılır? Kullanıcının kontrollü şekilde oluşturulması veya güncellenmesi gereken alanlar $fillable içerisinde tanımlanabilir.
17. Laravel Mass Assignment güvenlik açığı oluşturabilir mi? Yanlış yapılandırma ve kontrolsüz veri aktarımı hassas alanların değiştirilmesine neden olabilir.
18. Laravel Mass Assignment ile SQL Injection aynı şey mi? Hayır. Mass Assignment bir toplu veri atama ve Model güvenliği konusudur; SQL Injection farklı bir güvenlik problemidir.
19. Laravel Mass Assignment hatasında ilk ne kontrol edilmeli? Hata mesajındaki alanın ilgili Model'in $fillable veya $guarded yapılandırmasında nasıl ele alındığı kontrol edilmelidir.
20. Laravel Mass Assignment hatası nasıl hızlı çözülür? Model alanlarını, $fillable, $guarded, Controller'daki veri aktarımını ve validation yapısını birlikte kontrol etmek gerekir.

KONUNUZLA İLGİLİ ÖNERİ

Epik Müzayede — Canlı Müzayede Platformu

Antika, sanat eseri ve koleksiyon müzayedeleri için hazır yazılım. Laravel 12 üzerine kurulu, cPanel/paylaşımlı hostingde çalışacak şekilde tasarlandı.

Epik Yazılım
Kurucu

Web tasarım, SEO ve hosting üzerine 7+ yıl deneyimli, kurumsal projelere odaklanan içerik yazarı.

0.0 / 5 · 0 oy
Bu yazı faydalı oldu mu?
Hemen Arayın0552 291 08 91
Bize Yazıninfo@epikyazilim.com
Havale/EFT sonrasıÖdeme Bildirimi Yap
Rehber & CevaplarBilgi Bankası
Instagram WhatsApp