Laravel 5.5 MassAssignmentException

Dio*_*ool 4 php laravel laravel-5.5

我正在关注Laravel From Scratch教程系列,我目前正在为您的文章系统创建评论系统.但是我遇到了问题,我现在还不知道错误在说什么.

错误:

Illuminate\Database\Eloquent\MassAssignmentException
body
Run Code Online (Sandbox Code Playgroud)

评论模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Comment extends Model
{
    public function post()
    {
        return $this->belongsTo(Post::class);
    }
}
Run Code Online (Sandbox Code Playgroud)

帖子模型:

<?php

namespace App;

class Post extends Model
{
    public function comments()
    {
        return $this->hasMany(Comment::class);
    }

    public function addComment($body)
    {
        $this->comments()->create(compact('body'));
    }
}
Run Code Online (Sandbox Code Playgroud)

我做的路线:

Route::post('/posts/{post}/comments', 'CommentsController@store');
Run Code Online (Sandbox Code Playgroud)

评论控制器:

<?php

namespace App\Http\Controllers;

use App\Post;

class CommentsController extends Controller
{
    public function store(Post $post)
    {
        $post->addComment(request('body'));

        return back();
    }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢!

fes*_*tie 12

解释此错误

这是Laravel的安全功能.它旨在保护您在使用批量分配时不受形式操纵.

例如,在注册表单上:当您is_admin在数据库中有一个列时,用户只需操作您的表单is_admin即可true在您的服务器上进行操作,从而在您的数据库中进行操作.此安全功能通过使用白名单来定义安全字段来防止这种情况.


如何解决这个问题

您需要$fillable在模型上设置属性.它的值必须是一个数组,其中包含所有可以批量分配的字段(如用户名,电子邮件地址等).

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Comment extends Model
{
    # This property!
    protected $fillable = ['body'];

    // ...
}
Run Code Online (Sandbox Code Playgroud)

请参阅文档中的"质量分配":https: //laravel.com/docs/5.5/eloquent#mass-assignment