2017-08-15 125 views
0

我正在嘗試創建帶有註釋的帖子頁面;但是,由於系統無法識別帖子ID,因此在向帖子添加評論時,它無法正常工作。我是我做錯了,它不知道POST_ID等於$ POST_IDLaravel模型不起作用

,我發現了以下錯誤:

SQLSTATE[HY000]: General error: 1364 Field 'post_id' doesn't have a default value (SQL: insert into comments (body , updated_at , created_at) values (This is a test comment, 2017-08-15 19:51:47, 2017-08-15 19:51:47))

評論FORM

<div class="well"> 
    <h4>Leave a Comment:</h4> 

    <form role="form" method="post" action="{{ $post->id }}/comments"> 
    {{ csrf_field() }} 

     <div class="form-group"> 
      <textarea name="body" class="form-control" rows="3"></textarea> 
     </div> 

     <button type="submit" class="btn btn-primary">Submit</button> 
    </form> 
</div> 

ROUTE

Route::post('/posts/{post}/comments', '[email protected]'); 

控制器

public function store(Post $post) 
{ 
    $post->addComment(request('body')); 

    return back(); 
} 

評論模型

class Comment extends Model 
{ 
    protected $fillable = ['body']; 

    public function post() 
    { 
     return $this->belongsTo(Post::class); 
    } 
} 

樁模型

class Post extends Model 
{ 
    public function addComment($body) 
    { 
     Comment::create([ 
      'body' => $body, 
      'post_id' => $this->id 
     ]); 
    } 

    public function comments() 
    { 
     return $this->hasMany(Comment::class); 
    } 
} 
+0

嘗試在後模型添加POST_ID和身體爲可填寫陣列 – mattchambers

回答

4

post_id不是可填充數組:

class Comment extends Model 
{ 
    protected $fillable = ['body', 'post_id']; //<--- 
    ... 
} 
0

在你的表在MySQL確保您POST_ID是自動增量或可以爲「空」。這個錯誤是說post_id沒有價值,不能默認。

從代碼POST_ID的外觀爲您的主鍵而不是設置爲自動增量

0

我明白了,你的控制器功能doen't知道什麼帖子你談論。您需要使用後的ID來從形式回來,找到後,你可以保存這樣

$comment = new App\Comment(['message' => 'A new comment.']); 

$post = App\Post::find(1); 

$post->comments()->save($comment); 

新註釋如Laravel Docs 5.4 Eloquent表明,它會填滿ID在你。

此外,如果我沒有記錯,你不需要添加['post_id']到你的可填充字段數組。

SQL錯誤可以通過使用「列修改器」來解決。 (見下文)

Schema::table('users', function (Blueprint $table) { 
    $table->string('email')->nullable(); 
}); 

Laravel Docs 5.4 Migrations