Как объединить две модели в одной форме? Связь один ко многим. Laravel 5.8
Хочется собрать опрос + варианты ответов в одной форме с применением JQuery и Drag'n'Drop для сортировки. Набросок на изображении.
Как правильно реализовать подобное, чтобы работала валидация обеих моделей (вопрос + ответы)? Сначала создать опрос, а потом прикреплять к нему по одному варианту ответов? Или же можно как то грамотно всё объединить?
Ответы (1 шт):
Автор решения: E_K
→ Ссылка
- Для удобства вопрос и ответы групируем в массивы
<input type="text" name="question[text]" class="form-control">
//
<div class="col">
<input name="answers[1][text]" type="text" class="form-control" value="Yes">
</div>
<div class="col">
<input name="answers[1][position]" type="text" class="form-control" value="0">
</div>
- Вы делаете валидацию не модели, а данных формы. Форма одна, значит и валидацию можно сделать одну
$data = $request->validate([
'question.text' => 'required|unique:question|min:3',
'answers.*.text' => 'required|min:1',
'answers.*.position' => 'integer|distinct'
]);
- После валидации сохраняем вопрос и ответы для него.
$question = Question::create($data['question']);
////
$question->answers()->createMany($data['answers']);
