违反完整性约束:1048列"post_id"不能为空 [英] Integrity constraint violation: 1048 Column 'post_id' cannot be null

查看:185
本文介绍了违反完整性约束:1048列"post_id"不能为空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用laravel 5.5,我试图在帖子中添加评论,当我提交表单时出现以下错误

I'm using laravel 5.5 and im trying to add a comment to a post and i get the following error when i submit to the form

"SQLSTATE [23000]:违反完整性约束:1048列 'post_id'不能为null(SQL:插入comments(comment_bodyuser_idpost_idupdated_atcreated_at)值(sdsd,1 、、 2017-12-03 12:29:58,2017-12-03 12:29:58))

"SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'post_id' cannot be null (SQL: insert into comments (comment_body, user_id, post_id, updated_at, created_at) values (sdsd, 1, , 2017-12-03 12:29:58, 2017-12-03 12:29:58))

我将要使用的

im:<% %>是针对角度的,只是让大家知道.

im going to be using: <% %> is for angular, just letting everyone know.

在修补程序中有效

 Comment::create(['comment_body' => 'this works', 'user_id'=> 1, 'post_id'=>8]);

**路线*

Route::post('post/comment', 'CommentController@create');

发布模型

use App\User;
use App\Like;
use App\Comment;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;


class Post extends Authenticatable
{

    protected $fillable = [
        'title',
        'body',
        'user_id',
        'created_at',

    ];

   public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function likes()
    {
         return $this->hasMany('App\Like');
    }

    public function comments()
    {
        return $this->hasMany('App\Comment');
    }

评论模型

class Comment extends Model
{
    protected $fillable = [
        'comment_body',
        'user_id',
        'post_id'

    ];

    public function user()
    {
        return $this->belongsTo('App\User'); 
    }

    public function post()
    {
        return $this->belongsTo('App\Post');
    }
}

CommentConroller

public function create(Request $request, Post $post)
{

    $data = request()->validate([
     'comment_body' => 'required|max:1000'
    ]);


    $data['user_id'] = auth()->user()->id;
    $data['name'] = auth()->user()->name;
    $data['post_id'] = $post->id;
    $post = Comment::create($data);



    $response = new Response(json_encode($data));
    $response->headers->set('Content-Type', 'application/json'); 

    if(!$response){
        return 'something went wrong';
    }

    return response()->json($data); 


}

HTML

  <div class="comment-class animated bounceInUp" ng-show="writecomment">

                    <div class="panel-body">
                        <ng-form ng-model="commentForm" name="commentForm" method="POST" novalidate>
                        <div class="form-group">
                            <label>Write a Comment</label>


                            <textarea ng-model="post.comment" type="text" class="form-control" name="comment_body" cols="2" rows="2"></textarea>
                        </div>
                       <button id="eli-style-button" ng-click="addComment(post)" class="btn btn-primary" type="submit">Submit</button>
                        </form>
                    </div>
        <!-- END Comment form Inside Ng-repeat -->
                </div>
            <!-- End of ng-repeat post in mypost -->
            </div>

Main.js

$scope.addComment = function(post){

    $http.post('/post/comment',{
        comment_body: post.comment,
    }).then(function(result){
        console.log(result.data);
        $scope.myposts.push(result.data);
    });
};

推荐答案

为了使用

In order to use route model binding, you have to include the post as a parameter in your route:

Route::post('post/{post}/comment', 'CommentController@create');

然后这样称呼它:

 $http.post('/post/' + post.id + '/comment' ...

现在在您的控制器中,您将获得一个空的Post实例,该实例没有ID.

Right now in your controller you are getting an empty Post instance that has no ID.

这篇关于违反完整性约束:1048列"post_id"不能为空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆