如何解决Laravel 5.7中违反完整性约束的问题?

时间:2019-03-27 23:21:17

标签: laravel laravel-5.7

我遇到以下错误:SQLSTATE [23000]:违反完整性约束:1048列'user_id'不能为空(SQL:插入answersbodyuser_idquestion_idupdated_atcreated_at

我正在尝试使用Laravel向表单提交答案,但出现上述错误。首先,我在答案表中检查了架构,并正确定义了user_id:

public function up()
{
    Schema::create('answers', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->unsignedInteger('question_id');
        $table->unsignedInteger('user_id');
        $table->text('body');
        $table->integer('votes_count')->default(0);
        $table->timestamps();
    });
}

接下来,我将此代码添加到我的AnswersController.php中,以验证代码并在提交答案后重定向:

public function store(Question $question, Request $request)
{    
    $request->validate([
        'body' => 'required'
    ]);

    $question->answers()->create(['body' => $request->body, 'user_id' => \Auth::id()]);

    return back()->with('success', "Your answer has been submitted successfully");
}

我将Answer类导入到AnswersController.php中,并且还将body和user_id字段填充为Answer.php模型中的内容:

protected $fillable = ['body', 'user_id'];

当我单击表单上的提交按钮时,出现上面显示的SQL State错误。 user_id是我的数据库答案表中的有效字段。我似乎无法弄清楚。

1 个答案:

答案 0 :(得分:2)

您的代码看起来不错。但是错误非常简单明了:您没有得到user_id。 IE,您正在尝试创建一个答案枢纽,调用user_id从一个非对象创建。 \ Auth :: id()为空或无法识别您想要的内容。而是调用用户对象。

尝试一下:

$question->answers()->create(['body' => $request->body, 'user_id' => \Auth::user()->id]);

还要确保您确实有一个用户:使用auth中间件通过路由将表单发送回去:

Route::group(['middleware' => ['auth']], function () {
   Route::resource('questions.answers', 'AnswersController');
   // Any other routes where you want a user
}