Я создаю простой тест, в котором я использую разные типы вопросов. Моя таблица ответов имеет структуру: id, question_id, answer, is_correct . Если вопрос имеет тип флажка, то будет несколько вариантов ответа. Запись в базе данных будет выглядеть так (например):
id => 1, question_id => 2, answer => "answer 1", is_correct => 1;
id => 2, question_id => 2, answer => "answer 2", is_correct => 0;
id => 3, question_id => 2, answer => "answer 3", is_correct => 0;
Предположим, что администратор решил изменить тип вопроса на текстовый. На такой вопрос есть один ответ. При обновлении я получаю именно такую запись в базе данных:
id => 1, question_id => 2, answer => "new answer", is_correct => 1;
id => 2, question_id => 2, answer => "new answer", is_correct => 1;
id => 3, question_id => 2, answer => "new answer", is_correct => 1;
Это мой вариант:
public function update(Request $request, Question $question)
{
$question->update($request->all());
foreach ($request->input('answers') as $key => $value) {
Answer::where('question_id', $question->id)->update([
'answer' => $value,
'is_correct' => $request->input('is_correct')[$key]
]);
Answer::where('question_id', $question->id)
->where('answer', '!=', $value)->delete();
}
}
Но это не удаляет ненужные данные
Есть ли способ обновить первую запись и удалить остальные в методе обновления?