25

I am getting this error:

MassAssignmentException in Model.php line 448: _token

When I am using create method. Please review code below:

Contacts.php (Model):

class Contacts extends Model
{
    protected $table = ['name', 'mobile', 'email', 'address', 'created_at', 'updated_at'];
}

ContactsController.php (Controller):

public function store(Request $request)
{        
    $inputs = $request->all();
    $contacts = Contacts::Create($inputs);
    return redirect()->route('contacts.index');
}
Moppo
  • 18,797
  • 5
  • 65
  • 64
Sandeep
  • 973
  • 2
  • 13
  • 22

7 Answers7

90

For the Mass Assignment Exception: you should specify all the fields of the model that you want to be mass-assignable through create or update operations on the property $fillable:

protected $fillable = ['name', 'mobile', 'email', 'address', 'created_at', 'updated_at'];

Besides, the field $table should contain only the model's table name:

protected $table = 'your_table_name';
Moppo
  • 18,797
  • 5
  • 65
  • 64
6

This might happen in case if you have used the wrongly imported the class. if you are using the User Model.

Wrong Import

// mostly IDE suggestion
use Illuminate\Foundation\Auth\User;

Correct Model Import

use App\User;

i have gone through this. might help someone.

shakee93
  • 4,976
  • 2
  • 28
  • 32
5

You can all column fillable:

protected $guarded = array();

Add your model.

Ferhat KOÇER
  • 3,890
  • 1
  • 26
  • 26
1

You need only to add the following to your Model (Contact):

protected $fillable = ['name', 'mobile', 'email', 'address', 'created_at', 'updated_at'];

For example:

class Contacts extends Model { 
   protected $table = ['name', 'mobile', 'email', 'address', 'created_at', 'updated_at']; 
   protected $fillable = [ 'name', 'mobile', 'email', 'address', 'created_at', 'updated_at' ]; 
}
dovetalk
  • 1,995
  • 1
  • 13
  • 21
  • 1
    Can you provide a but more detail. Are you suggesting that they don't need the `store` function, that your provided `$fillable` should replace `$table`, or something else? – dovetalk Apr 03 '19 at 22:48
  • Mr Sandeep want to insert data in the contact table so he need to go in the Contact Model and Put ```protected $fillable = [ 'name', 'mobile', 'email', 'address', 'created_at', 'updated_at' ];``` – Youssef Belyazidi Apr 03 '19 at 22:57
  • So you suggest that this should be added to the his `Contact` class, in addition to the code he already provided? – dovetalk Apr 03 '19 at 23:27
  • Yes Exactly ! like This ```class Contacts extends Model { protected $table = ['name', 'mobile', 'email', 'address', 'created_at', 'updated_at']; protected $fillable = [ 'name', 'mobile', 'email', 'address', 'created_at', 'updated_at' ]; }``` – Youssef Belyazidi Apr 03 '19 at 23:37
0

If all of the above fails, you can try following.

Put following after namespace.

use Eloquent;

Put following at the start of your store method.

Eloquent::unguard();

like:

public function store(Request $request)
{        
   Eloquent::unguard();
   $inputs = $request->all();
   $contacts = Contacts::Create($inputs);
   return redirect()->route('contacts.index');
}

This is not recommended though, as this makes things vulnerable to attacks. But if you need a quick fix this might help.

0

Check Model you have Imported or Not. If not then use this.

<?php 

 namespace App\Http\Controllers\Auth; 
 use App\Http\Controllers\Controller; 
 use App\User;
Rahul Hirve
  • 1,109
  • 13
  • 20
0

Make sure you are putting the $fillable or $guarded in the app\Contacts.php file and not the app\Http\Controllers\ContactsController.php file. It should be obvious, but it can be overlooked.

Keith Turkowski
  • 751
  • 7
  • 11