Это некоторый контекст о том, что я пытаюсь сделать, я делаю систему школьных опросов с опросами, и в этих опросах есть разделы, которые можно добавить к определенному опросу, в этих разделах есть вопросы, которые относятся к нему,например, раздел может быть Кампус , и вопросы в этом разделе относятся к школьному кампусу.
Я пытаюсь удалить раздел и удалить все вопросы, относящиеся к этому разделу, и мой код делает это наполовину. Вопросы имеют разные «Категории», которые представляют собой тип ответа, например, да или нет, рейтинг, текст и, наконец, вопрос с несколькими вариантами ответов. Для вопросов с множественным выбором они имеют отношение к вариантам вопроса.
Если в разделе нет вопроса с несколькими вариантами ответов, тогда он удаляет раздел и все вопросы, но если это так, я получаю эту ошибку
SQLSTATE [23000]: Нарушение ограничения целостности: 1451 Невозможно удалить или обновить родительскую строку: ограничение внешнего ключа не выполнено (unadeca_system.survey_question_options, CONSTRAINT survey_question_options_survey_question_id_foreign FOREIGN KEY (survey_question_id) REFERENCES `survey_questions_id_is_istion_tiontion.sure_section_section_section_section_section_section_section_section_section_section_section_section_section_section_екции) (SQL)и survey_questions.survey_section_id не является нулевым)
Отношения имеют следующий вид
Разделы> hasMany> Вопросы> hasMany> QuestionOptions
IУдаляю вот так в разделе модели
public static function boot() {
parent::boot();
// when you are deleting a SurveySection, also delete all related questions
static::deleting(function($section){
$section->questions->each(function($question) {
$question->surveyQuestionOption()->delete();
$question->delete();
});
});
}
В разделе контроллера
public function destroy($id)
{
DB::beginTransaction();
$section = SurveySection::findOrFail($id);
$section->questions()->delete();
$section->delete();
DB::commit();
return back();
}
Вот так я удаляю вопросы из модели
public static function boot() {
parent::boot();
// when you are deleting a SurveyQuestion, also delete all related options
static::deleting(function($question){
$question->surveyQuestionOption->each(function($option) {
$option->delete();
});
});
}
Вот так я удаляю вопросы в контроллере
public function destroy($id)
{
DB::beginTransaction();
$preg = SurveyQuestion::findOrFail($id);
$preg->surveyQuestionOption()->delete();
$preg->delete();
DB::commit();
return back();
}
Как я могу исправить эту ошибку, чтобы удалить все вопросы, независимо от того, есть ли у них несколько вариантов выбора?