我正在编写评论部分;我从下面的表格中获取用户数据:
<div class="comment">
<h2>Leave a comment</h2>
<form method="post" action="/blog/{{$post->id}}/comments">
{{csrf_field()}}
<input type="text" name= "name" class="textbox" value="Name" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Name';}">
<input type="text" name="email" class="textbox" value="Email" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Email';}">
<textarea value="Message:" name="body" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Message';}">Message</textarea>
<div class="smt1">
<input type="submit" value="add a comment">
</div>
</form>
</div>
我通过如下的CommentsController存储方法获取路径上的数据:
Route::post('/blog/{post}/comments','CommentsController@store');
然后通过控制器的方法将它们存储在db上:`
public function store(Post $post){
Comment::create([
'body' => request('body'),
'email' =>request('email'),
'name' =>request('name'),
'post_id' => $post->id
]);
return back();
}
问题是,当我进入数据库时,body字段被完全插入,但是post_id,name,email他们没有插入数据库,它们是空的。
我已检查过我die;
dump
,dd();
和{{1}上的表单中是否有name
email
$post->id
的数据我从表单中获取完全正常的数据,但是我无法将它们插入到数据库中?
答案 0 :(得分:7)
在评论模型中受保护的$ fillable数组中是否列出了post_id,name和email列?如果它们没有列为可填写的,那么就不会输入它们。
答案 1 :(得分:3)
在模型上使用create()
方法时,您将批量分配字段。因此,您需要在模型中设置$fillable
属性以及可以分配的所有字段,或者在模型中设置$guarded
属性以保护字段不被分配。确保您只设置其中一个属性,而不是两者都设置。
在您的情况下,您应该将fillable属性设置为此。
protected $fillable = [
'name', 'email', 'body', 'post_id'
];
同时,在创建这样的新模型时,您无需担心质量分配。
$comment = new Comment;
$comment->body = request('body');
$comment->email = request('email');
$comment->name = request('name');
$comment->post_id = $post->id;
$comment->save();