Mengatasi Error ‘MassAssigmentException in Model.php’ di Laravel

Posted on Posted in Artikel, Laravel

Pada artikel ini akan dijelaskan bagaimana cara untuk mengatasi error “MassAssigmentException in Model.php”.

Secara garis besar Model di laravel didefinisikan dengan Eloquent. Jadi dilaravel kita dapat memasukkan, mengedit, menghapus data dari database menggunakan Eloquent Model.

Nah, Eloquent Model ini sudah dipenuhi dengan banyak sekali fungsi-fungsi untuk memudahkan kita berinteraksi dengan Database.

MassAssigment adalah salah satunya, untuk memahami fungsi MassAssigment, maka kita harus memahami konsep Model dilaravel lebih dulu.

Nah, anggap saja kita mempunyai sebuah model dengan nama ‘Article’. Lalu kita buat tabel didatabase untuk model tersebut dengan nama ‘articles’. Lalu buat skema untuk tabel ‘articles’ sebagai berikut :

$table->increments(‘id’);

$table->string(‘title’);

$table->string(‘content’);

$table->timestamps();

Nah, masukkan skema diatas pada DatabaseMigration untuk articles.

Untuk insert data ke database, laravel model punya 2 cara:

1. Dengan menginput data satu per satu, lalu simpan dengan method save().

2. Dengan menggunakan method create(), dengan data berupa array.

Jika menggunakan cara pertama, maka kodenya akan seperti ini :

$article = new Article;

$article->title = $requests[‘title’];

$article->content = $request[‘content’];

$success = $article->save();

Kode diatas adalah contoh dari cara pertama, dengan asumsi variable $requests adalah variable yang menampung data request dengan nama key yang sama dengan nama kolom database.

Nah, kode diatas akan berhasil untuk menyimpan data, jika tidak ada penulisan yang salah.

Bagaimana dengan cara kedua? Jika kita asumsikan dengan data yang sama, yaitu variable $request berupa array dari data request, maka kode untuk insert data dengan cara kedua adalah seperti ini:

$success = Article::create($requests);

Nah, kode ini akan berhasil, jika pada model Article terdapat properti $fillable, 

Jadi seperti ini, ketika kita menjalankan method create(), method akan mencari properti $fillable pada model, properti ini berisi array dari kolom mana saja pada database yang boleh/harus diisi.

Jika tidak ada properti $fillable, maka method tidak tahu kolom mana saja yang boleh/harus diisi, sehingga memunculkan error MassAssigmentException.

Untuk mencegah ini maka tambahkan properti $fillable pada model, masuk ke model Article dan tambahkan kode ini :

protected $fillable = [‘title’, ‘content’];

Karena pada contoh ini, kolom yang boleh/harus diisi adalah title dan content, maka tambahkan keduanya kedalam properti $fillable.

Nah, jika tidak ada kesalahan penulisan, seharusnya kode diatas akan berhasil.

Jadi error MassAssignment biasanya muncul ketika kita menambahkan data dengan method create(), tapi belum ada properti $fillable pada model, atau sudah ada properti $fillable, tapi data yang dimasukkan tidak sesuai dengan keterangan yang ada pada properti $fillable.

Jadi jika anda menemui error MassAssignmentException, solusinya adalah :

  1. Menambahkan properti $fillable yang berisi array kolom yang boleh diisi didataabse, jika belum ada properti tersebut.
  2. Cek apakah data yang dimasukkan pada method create(), sesuai dengan keterangan pada properti $fillable.
  3. Menambahkan data menggunakan cara pertama (bukan dengan method create()).

Sekian. 🙂