Php (Laravel)对大规模分配保护的质疑

Php (Laravel)对大规模分配保护的质疑,php,laravel,eloquent,laravel-5.1,mass-assignment,Php,Laravel,Eloquent,Laravel 5.1,Mass Assignment,我正在开发一个包含多个内容的网站,包括一个博客,我对大规模任务保护有一些疑问 当我在博客文章上发表评论时,我想“可填充”字段应该是评论的主体、文章id和家长注释id(可选,仅用于回复评论),但当我想到 ArticleComment::create([ 'author_id' => Auth::user()->id, 'body' => $request->input('body'), 'article

我正在开发一个包含多个内容的网站,包括一个博客,我对大规模任务保护有一些疑问

当我在博客文章上发表评论时,我想“可填充”字段应该是评论的主体、文章id和家长注释id(可选,仅用于回复评论),但当我想到

ArticleComment::create([
            'author_id' => Auth::user()->id,
            'body' => $request->input('body'),
            'article_id' => $request->input('article_id'),
            'parent_comment_id' => $request->input('parent_comment_id')
        ]);
我发现,即使是author_id字段也应该是可批量分配的,以便在数据库中持久化(而不是获取外键失败)。 我发现的唯一替代方法是从新实例中组合注释并保存它:

$comment = new App\ArticleComment();
$comment->author_id = Auth::user()->id;
$comment->body = $request->input('body');
$comment->article_id = $request->input('article_id');
$comment->parent_comment_id = $request->input('parent_comment_id');
$comment->save()
但在这种情况下,不需要任何“可填充”字段,因为这种方式不会生成任何质量分配异常


我知道批量分配应该通过post请求防止恶意数据更改,但我不知道,例如,有人会如何修改第2行中的作者id,因为它来自Auth而不是输入。

在您的示例中,没有人能够修改它。但是,如果您想分配这样的内容,该怎么办

ArticleComment::create($request->all());

现在可以修改字段。这就是批量分配的目的所在。

我认为在这种情况下,您可以使用
新文章注释($request->input())
$comment->fill($request->input())
分配用户可输入的数据,然后分别分配id或非用户可编辑的数据(在您的情况下,是
作者id

$comment = new App\ArticleComment($request->input());
$comment->author_id = Auth::user()->id;
$comment->save()
这将阻止用户发布带有author_id作为字段的表单,但仍然允许您快速分配用户字段,而无需在需要的任何地方列出它们