我遇到以下错误:SQLSTATE [23000]:违反完整性约束:1048列'user_id'不能为空(SQL:插入answers
(body
,user_id
, question_id
,updated_at
,created_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是我的数据库答案表中的有效字段。我似乎无法弄清楚。
答案 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
}