SQLSTATE [23000]: Нарушение ограничения целостности: 19 NOT NULL Даже после того, как обязательные поля были обнулены

Я сделал все обязательные поля обнуляемыми, но все равно получаю эту ошибку

SQLSTATE [23000]: нарушение ограничения целостности: 19 Ошибка ограничения NOT NULL: public_problems.name (SQL: вставить в значения public_problems (answer, helper_id, helper_name, updated_at, created_at) (Привет, братан, все будет хорошо, 2, kakashi, 2020- 07-30 07:35:05, 2020-07-30 07:35:05))

Вот моя база данных: -

public function up()
    {
        Schema::create('public_problems', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->integer('user_id')->unsigned();
            $table->text('answer')->nullable();
            $table->integer('helper_id')->unsigned()->nullable();
            $table->string('helper_name')->nullable();
            $table->string('title');
            $table->text('problem');
            $table->string('filled_by');

            $table->timestamps();
        });
    }

Модель: -

class PublicProblem extends Model
{
    protected $fillable = ['name', 'user_id', 'title', 'problem', 'filled_by', 'helper_id', 'answer', 'helper_name'];

}

Я разделил это поле на 2 функции: -
Контроллер

public function store(Request $request)
    {
        $data = request()->validate([
        'title' => 'required',
        'problem' => 'required',

      ]);
         PublicProblem::create([
            'title'=>$data['title'],
            'problem'=>$data['problem'],
            'name'=>Auth::user()->name,
            'user_id'=>Auth::user()->id,
            'filled_by'=>Auth::user()->uuid,

          ]);
         return redirect('/home');
    }

public function answer(Request $request) //The Error Occurs when I try to execute this function 
    {
    

        $data = request()->validate([
            'answer' => 'required',
        ]);

        PublicProblem::create([
            'answer' => $data['answer'],
            'helper_id' => Auth::user()->id,
            'helper_name' => Auth::user()->name,
        ]);
        return redirect('/home');
    }

Ошибка возникает, когда я пытаюсь выполнить функцию answer()
Не могу понять, в чем ее причина, пожалуйста, помогите


person Anonymous Chatbox    schedule 30.07.2020    source источник
comment
поле name не допускает значения NULL. Вы пытаетесь создать PublicProblem в своем answer function, вы должны заполнить все данные, которые не допускают значения NULL   -  person Doggo    schedule 30.07.2020
comment
@STA Неустранимая ошибка будет отвечать за GUARD, а не за SQL   -  person Doggo    schedule 30.07.2020
comment
@STA Я вошел в систему, я думаю, что причина ошибки в том, что я должен использовать какой-либо метод вставки вместо создания   -  person Anonymous Chatbox    schedule 30.07.2020


Ответы (2)


Проблема:

SQLSTATE [23000]: нарушение ограничения целостности: 19 Ошибка ограничения NOT NULL: public_problems.name

Решение:

Имя файла в вашей базе данных не допускает значения NULL. Если вы хотите вызвать метод create, вам нужно будет либо добавить 'name' => 'someName', либо добавить ->nullable() ограниченный в поле имени.

PublicProblem::create([
            'answer' => $data['answer'],
            'helper_id' => Auth::user()->id,
            'helper_name' => Auth::user()->name,
            'name' => 'someName',
        ]);

Обратите внимание:

У вас есть еще несколько полей, которые не допускают значения NULL, поэтому ошибка может повториться для другого поля. (я прокомментировал это ниже)

$table->id();
$table->string('name'); //always needs a value
$table->integer('user_id')->unsigned(); //always needs a value
$table->text('answer')->nullable();
$table->integer('helper_id')->unsigned()->nullable();
$table->string('helper_name')->nullable();
$table->string('title'); //always need a value
$table->text('problem'); //always needs a value
$table->string('filled_by'); //always needs a value
person Aless55    schedule 30.07.2020
comment
есть ли какой-нибудь insert метод, который я могу использовать вместо создания - person Anonymous Chatbox; 30.07.2020
comment
@AnonymousChatbox нет, это будет невозможно, пока поля не имеют значения NULL или имеют значение по умолчанию - person Aless55; 30.07.2020
comment
@AnonymousChatbox, я бы сделал их нулевыми, и в вашем методе проверял обязательные поля и обновлял только нужные поля. - person Aless55; 30.07.2020
comment
Поэтому я должен сохранить все поле обнуляемым и инертить значения по мере необходимости. - person Anonymous Chatbox; 30.07.2020
comment
@AnonymousChatbox да, на мой взгляд, это правильный путь - person Aless55; 30.07.2020
comment
Итак, я создаю запись в функции store(), и какой метод мне следует использовать в моей функции answer() для вставки данных в остальные поля? - person Anonymous Chatbox; 30.07.2020
comment
Позвольте нам продолжить это обсуждение в чате. - person Aless55; 30.07.2020

Ошибка здесь, ваше имя, название, user_id, проблема, заполнено_по. обязательно, сделайте это заполненным допускающим значение NULL при переносе или укажите значение при вставке в таблицу, в противном случае SQL выдаст ошибку:

PublicProblem::create([
            'name' => "Name", // Not null
            'title' => "Title"; // Not null
            'problem' => "Problem", // Not null
            'filled_by' => "Filled by", // not null
            'user_id' => "1", // not null
            'answer' => $data['answer'],
            'helper_id' => Auth::user()->id,
            'helper_name' => Auth::user()->name,
        ]);
person sta    schedule 30.07.2020