Php Laravel 5.5 MassaSignmentException
我正在关注Laravel从无到有的教程系列,我目前正在为您的文章系统创建一个评论系统。但是我有个问题,我不知道这个错误在说什么 错误:Php Laravel 5.5 MassaSignmentException,php,laravel,laravel-5.5,Php,Laravel,Laravel 5.5,我正在关注Laravel从无到有的教程系列,我目前正在为您的文章系统创建一个评论系统。但是我有个问题,我不知道这个错误在说什么 错误: Illuminate\Database\Eloquent\MassAssignmentException body <?php namespace App; use Illuminate\Database\Eloquent\Model; class Comment extends Model { public function post()
Illuminate\Database\Eloquent\MassAssignmentException
body
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
public function post()
{
return $this->belongsTo(Post::class);
}
}
<?php
namespace App;
class Post extends Model
{
public function comments()
{
return $this->hasMany(Comment::class);
}
public function addComment($body)
{
$this->comments()->create(compact('body'));
}
}
Route::post('/posts/{post}/comments', 'CommentsController@store');
<?php
namespace App\Http\Controllers;
use App\Post;
class CommentsController extends Controller
{
public function store(Post $post)
{
$post->addComment(request('body'));
return back();
}
}
评论模型:
Illuminate\Database\Eloquent\MassAssignmentException
body
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
public function post()
{
return $this->belongsTo(Post::class);
}
}
<?php
namespace App;
class Post extends Model
{
public function comments()
{
return $this->hasMany(Comment::class);
}
public function addComment($body)
{
$this->comments()->create(compact('body'));
}
}
Route::post('/posts/{post}/comments', 'CommentsController@store');
<?php
namespace App\Http\Controllers;
use App\Post;
class CommentsController extends Controller
{
public function store(Post $post)
{
$post->addComment(request('body'));
return back();
}
}
注释控制器:
Illuminate\Database\Eloquent\MassAssignmentException
body
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
public function post()
{
return $this->belongsTo(Post::class);
}
}
<?php
namespace App;
class Post extends Model
{
public function comments()
{
return $this->hasMany(Comment::class);
}
public function addComment($body)
{
$this->comments()->create(compact('body'));
}
}
Route::post('/posts/{post}/comments', 'CommentsController@store');
<?php
namespace App\Http\Controllers;
use App\Post;
class CommentsController extends Controller
{
public function store(Post $post)
{
$post->addComment(request('body'));
return back();
}
}
批量分配是指当您向模型创建发送一个数组时,基本上是一次性在模型上设置一组字段,而不是一个接一个,就像您在这里所做的那样:
public function addComment($body)
{
$this->comments()->create(compact('body'));
}
您需要将要填充的字段添加到Comments.php
model:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
protected $fillable = ['body'];
public function post()
{
return $this->belongsTo(Post::class);
}
}
此错误的解释
这是Laravel的一项安全功能。它旨在保护您在使用体量指定时不受形状操纵
例如,在注册表单上:当您的数据库中有一个is_admin
列时,用户只需操纵您的表单即可将服务器上的is_admin
设置为true
,从而将其设置在数据库中。此安全功能通过使用白名单定义安全字段来防止这种情况
如何解决这个问题
您需要在模型上设置$filleble
属性。它的值必须是一个数组,其中包含可安全批量分配的所有字段(如用户名、电子邮件地址等)
Addprotected$filleble=['db_column1','db_column']
在您的两个模型中可能存在重复项。这成功了,谢谢您给我详细的解释。