Как решить проблему нарушения целостности в Laravel 5.7? - PullRequest
0 голосов
/ 28 марта 2019

Я получаю следующую ошибку: 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();
    });
}

Затем я добавил этот код в свой файл ansersController.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 в свой AnswerSontroller.php, а также преобразовал поля body и user_id в fillable в модели Answer.php:

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

Когда я нажимаю кнопку отправки в моей форме, я получаю ошибку состояния SQL, показанную выше. user_id - допустимое поле в моей таблице ответов БД. Я не могу понять это.

1 Ответ

2 голосов
/ 28 марта 2019

Ваш код выглядит нормально.Но ошибка довольно проста: вы не получаете user_id.То есть вы пытаетесь создать сводную точку ответа, вызывая 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...