Laravel прикрепить и синхронизировать c проблема - PullRequest
0 голосов
/ 09 мая 2020

Надеюсь, вы все в порядке и в безопасности, где бы вы ни были. Во Франции мы как в сериале «Ходячие мертвецы»!

Я делаю небольшое приложение для управления школой с Laravel.

У меня есть отношения «многие ко многим» между моими табличными курсами и моими табличными дисциплинами (в курсе может быть много дисциплин).

Используя Select2 JS, я могу легко выбирать свои дисциплины создать вид лезвия, но когда я выбираю одну или несколько дисциплин, на моей странице показа лезвия отображаются разные.

Вот пример:

Если я выберу «Матьер 3 и Матьер 4», он покажет мне Матьер 1 и Матьер 2 в моей индексной странице.

enter image description here

enter image description here

Если я выберу 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>

Итак, я застрял ...

Спасибо всем и будьте в безопасности!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...