将[title]添加到fillable属性,以允许在[App \ Post]上进行批量分配

时间:2018-12-15 13:55:40

标签: php laravel

在Mysql中插入数据时遇到以下错误:

“将[title]添加到可填充属性,以允许在[App \ Post]上进行批量分配。”

这是我的代码:

$post = Post::create([
'title' => $request->input('title'),
'body' => $request->input('body')
]);

当我使用另一种方式插入数据时,它运行良好: 以下代码可以正常工作:

//Create Post
$post = new Post;
$post->title = $request->input('title');
$post->body = $request->input('body');
$post->save();

谁能解释为什么代码的上半部分抛出错误?

9 个答案:

答案 0 :(得分:4)

对于全部$ fillable

protected $guarded = ['id']; 

答案 1 :(得分:2)

在模型Post中的可填充数组中添加标题,以允许通过create和大量方法进行保存

protected $fillable = ['title'];

答案 2 :(得分:1)

对于批量分配,您应该在模型(App \ Post)中定义“可填充数组”

所以您的模型应该是这样的:

    class Post extends Model
    {

        protected $fillable = ['title','body']; //<---- Add this line
// ... 
}

更多信息: [https://laravel.com/docs/5.7/eloquent#mass-assignment][1]

答案 3 :(得分:1)

所有 Laravel 模型在创建时不包含任何可填充属性。

要允许它们接受字段数据并插入到数据库中,我们必须首先在我们的模型中允许它们。

在您的 Post 模型中,添加以下行:

protected $fillable = ['title'];

答案 4 :(得分:0)

在您的Post模型中,将有一个$fillable数组变量,您必须添加“ title”。

有关更多信息:What does "Mass Assignment" mean in Laravel?

答案 5 :(得分:0)

出现此错误是因为您没有在模型中声明变量-您应该像这样在类中定义它; ​​

protected $fillable = ['title'];

答案 6 :(得分:0)

protected $fillable = ['title']; would be : 'protected $guarded = [];的替代方法 并将其保留为空数组,而无需在其中定义任何内容。 它与$fillable完全相反,有点像告诉数据库接受除$guarded数组中指定的字段之外的所有内容。

答案 7 :(得分:0)

防止一个字段的最佳选择

Post::create($request->except('_token'));

答案 8 :(得分:0)

检查the docs here

<块引用>

或者,您可以使用 create 方法来“保存”一个新模型 使用单个 PHP 语句。插入的模型实例将是 由 create 方法返回给你:

use App\Models\Flight;

$flight = Flight::create([
    'name' => 'London to Paris',
]);
<块引用>

但是,在使用 create 方法之前,您需要指定 模型类上的可填充或受保护的属性。这些 属性是必需的,因为所有 Eloquent 模型都受到保护 默认情况下针对批量分配漏洞。