在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();
谁能解释为什么代码的上半部分抛出错误?
答案 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”。
答案 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)
或者,您可以使用 create 方法来“保存”一个新模型 使用单个 PHP 语句。插入的模型实例将是 由 create 方法返回给你:
use App\Models\Flight;
$flight = Flight::create([
'name' => 'London to Paris',
]);
<块引用>
但是,在使用 create 方法之前,您需要指定 模型类上的可填充或受保护的属性。这些 属性是必需的,因为所有 Eloquent 模型都受到保护 默认情况下针对批量分配漏洞。