Как вставить значение флажка в БД в Laravel?

#html #database #laravel-8

#HTML #База данных #laravel-8

Вопрос:

Я пытаюсь вставить значение флажка в базу данных в рамках Laravel, но не могу. Я продолжаю получать следующую ошибку.

Попытка присвоить свойство ‘record_id3’ не-объекту

Контроллер

 public function Postindex1(Request $request)
{
    $pd4 = new Questioncourse();
    $pd4 = $request->all();

    $pd5 = implode(',', $request->input('hobby'));
    $pd5 = implode(',', $request->input('interest'));
    $pd5 = implode(',', $request->input('career'));

    $pd4['hobby'] = $pd5;
    $pd4['interest'] = $pd5;
    $pd4['career'] = $pd5;
    $pd4->record_id3 = Auth::user()->id;
    $pd4->save();

    return redirect('/question')->with('success', 
        'Your preferences have been saved!');
}
 

Миграция

 Schema::create('questioncourses', function (Blueprint $table) {
    $table->id();
    $table->integer('record_id3')->unsigned();
    $table->foreign('record_id3')->references('id')->on('users');
    $table->string('hobby');
    $table->string('interest');
    $table->string('career');
    $table->timestamps();
});
 

Комментарии:

1. Работает ли $ pd4[‘record_id3’] = Auth::user()->id;?

Ответ №1:

В вашем коде есть некоторые ошибки :

 $pd4 = new Questioncourse(); // Here you instanciate the Questioncourse Model
$pd4 = $request->all(); // Here you discard the value of $pd4 and change it with an Array 
                        // containing the $request data
 

Итак, у вас больше нет экземпляра Questioncourse , и, следовательно, вы не можете использовать методы calss или атрибуты (например record_id3 ).

Что вам нужно сделать :

  1. Вам не нужно $pd4 = $request->all(); , удалите его,
  2. Используйте разные переменные для каждой группы флажков (не только $pd5 !),
  3. Используйте мутаторы для установки значений атрибутов модели, поэтому ваш окончательный код должен быть таким :
     public function Postindex1(Request $request){
        $pd4 = new Questioncourse();
        // $pd4 = $request->all(); There is no need for this
    
        $hobby = implode(',', $request->input('hobby'));
        $interest = implode(',', $request->input('interest'));
        $career = implode(',', $request->input('career'));
    
        $pd4->hobby = $hobby;
        $pd4->interest = $interest;
        $pd4->career = $career;
        $pd4->record_id3 = Auth::user()->id;
    
        $pd4->save();
    
        return redirect('/question')->with('success', 'Your preferences have been saved!'); 
    }