Laravel 5:Model.php中的MassAssignmentException

时间:2016-01-02 11:45:49

标签: php laravel laravel-5 eloquent mass-assignment

我收到此错误:

  

Model.php第448行中的MassAssignmentException:_token

当我使用create方法时。请查看以下代码:

Contacts.php (型号):

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

ContactsController.php (控制器):

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

7 个答案:

答案 0 :(得分:85)

对于Mass Assignment Exception:您应该通过属性$fillable上的创建或更新操作指定要进行批量分配的模型的所有字段:

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

此外,字段$table应仅包含模型的表名:

protected $table = 'your_table_name';

答案 1 :(得分:4)

如果你使用了错误导入的类,可能会发生这种情况。如果您使用的是用户模型。

错误的导入

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

更正模型导入

use App\User;
我已经完成了这件事。可能对某人有所帮助。

答案 2 :(得分:4)

您可以填写所有列:

protected $guarded = array();

添加您的模型。

答案 3 :(得分:1)

您只需要将以下内容添加到模型(Contact):

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

例如:

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

答案 4 :(得分:0)

如果上述所有操作均失败,您可以尝试以下操作。

在名称空间后面添加以下内容。

use Eloquent;

store方法的开头添加以下内容。

Eloquent::unguard();

喜欢:

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

但不建议这样做,因为这会使攻击容易受到攻击。但如果您需要快速修复,这可能有所帮助。

答案 5 :(得分:0)

检查您已导入或未导入的模型。如果没有,那就使用它。

<?php 

 namespace App\Http\Controllers\Auth; 
 use App\Http\Controllers\Controller; 
 use App\User;

答案 6 :(得分:0)

确保将$ fillable或$ guarded放置在app \ Contacts.php文件中,而不是app \ Http \ Controllers \ ContactsController.php文件中。它应该很明显,但是可以忽略。