Laravel没有将所有数据插入DB

时间:2017-05-30 18:18:55

标签: php mysql database laravel blogs

我正在编写评论部分;我从下面的表格中获取用户数据:

<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; dumpdd();和{{1}上的表单中是否有name email $post->id的数据我从表单中获取完全正常的数据,但是我无法将它们插入到数据库中?

2 个答案:

答案 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();

在此处详细了解https://laravel.com/docs/5.4/eloquent