Надеюсь, вы все в порядке и в безопасности, где бы вы ни были. Во Франции мы как в сериале «Ходячие мертвецы»!
Я делаю небольшое приложение для управления школой с Laravel.
У меня есть отношения «многие ко многим» между моими табличными курсами и моими табличными дисциплинами (в курсе может быть много дисциплин).
Используя Select2 JS, я могу легко выбирать свои дисциплины создать вид лезвия, но когда я выбираю одну или несколько дисциплин, на моей странице показа лезвия отображаются разные.
Вот пример:
Если я выберу «Матьер 3 и Матьер 4», он покажет мне Матьер 1 и Матьер 2 в моей индексной странице.
Если я выберу Mat ie 1 (с Id 1) I получите эту ошибку:
SQLSTATE [23000]: нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (elearning
. course_discipline
, CONSTRAINT course_discipline_discipline_id_foreign
FOREIGN KEY (discipline_id
) ССЫЛКИ disciplines
(id
) ПРИ КАСКАДЕ УДАЛЕНИЯ) (SQL: вставить в course_discipline
(course_id
, discipline_id
) значения (9, 0), (9, 1))
Вот мой контроллер
public function createCourse(Request $request)
{
$request->validate([
'title' => 'required|string',
'slug' => 'required|string',
'status' => 'required|integer',
'formation_id' => 'required|integer',
'description' => 'required',
'price' => 'required',
'video_prev' => 'required',
]);
$course = new Course();
$course->title = $request['title'];
$course->slug = $request['slug'];
$course->status = $request['status'];
$course->formation_id = $request['formation_id'];
$course->description = $request['description'];
$course->price = $request['price'];
$course->video_prev = $request['video_prev'];
$course->user_id = Auth::id();
$course->save();
$course->disciplines()->attach(request('disciplines'));
return redirect(route('adminCourses'))->with('success', 'Le cours a bien été crée');
}
public function editCourse($id)
{
$course = Course::findOrFail($id);
$disciplines = Discipline::all();
$formations = Formation::all();
return view('admin.cours.editCourse', compact('course', 'disciplines', 'formations'));
}
public function editCoursePost(Request $request, $id)
{
$request->validate([
'title' => 'required|string',
'slug' => 'required|string',
'status' => 'required|string',
'formation_id' => 'required|string',
'description' => 'required',
'price' => 'required',
'video_prev' => 'required',
]);
$course = Course::findOrFail($id);
$course->title = $request['title'];
$course->slug = $request['slug'];
$course->status = $request['status'];
$course->formation_id = $request['formation_id'];
$course->description = $request['description'];
$course->video_prev = $request['video_prev'];
$course->price = $request['price'];
$course->save();
$course->disciplines()->sync($request->input('disciplines', []));
return redirect(route('adminCourses'))->with('success', "Le cours a bien été mis à jour");
}
Мой HTML Код для создания, обновления и индексации:
Создать:
<div class="form-group row">
<div class="col-lg-6">
<label class="control-label">Matières</label>
<select name="disciplines[]" class="select2 form-control select2-multiple" multiple="multiple" >
@foreach($disciplines as $id => $discipline)
<option value="{{ $id }}" {{ in_array($id, old('disciplines', [])) ? 'selected' : '' }}>{{ $discipline->title }}</option>
@endforeach
</select>
</div>
</div>
Обновление:
<div class="form-group row"
<div class="col-lg-7">
<label class="col-sm-12 col-form-label">Matières</label>
<select name="disciplines[]" class="select2 form-control @error('disciplines') is-invalid @enderror" type="text select2-multiple" multiple="multiple"
data-placeholder="Choisir une formation ..." required>
@foreach($disciplines as $id => $discipline)
<option value="{{ $id }}" {{ (in_array($id, old('disciplines', [])) || $course->disciplines->contains($id)) ? 'selected' : '' }}>{{ $discipline->title }}</option>
@endforeach
</select>
</div>
</div>
Индекс:
<td>
@foreach ($course->disciplines as $discipline)
<span class="badge badge-danger">{{ $discipline->title }}</span> <br>
@endforeach
</td>
Итак, я застрял ...
Спасибо всем и будьте в безопасности!