2 внешних ключа один клинок создания - PullRequest
0 голосов
/ 17 февраля 2020

Я думаю, что это легко, но мой мозг не пытается это понять. Итак, проблема в том, что у меня есть таблица серий, таблица сезонов и таблица эпизодов. Я создаю серию, затем я создаю сезон, выбирая серию, а затем я создаю эпизоды, сначала выбирая серию, а затем сезон. Я застрял в части эпизодов. Я хотел, чтобы при выборе сезона в раскрывающейся таблице находились только серии, относящиеся к этой серии. Могу ли я получить некоторую помощь о том, как решить эту проблему. Кроме того, в моей таблице эпизодов у меня есть season_id и episode_id. Вот мой клинок создания для Эпизода:

@extends('layouts.admin')

@section('content')
<div class="col-12">
    <div class="card">
        <div class="card-header">
            <h1 class="card-title">
                Create Episode
            </h1>
        </div>
        <div class="card-body">
            <form action="{{route('episodes.store')}}" method="post" enctype="multipart/form-data">
                @csrf

                <div class="form-group">
                    <label for="series_id">Series</label>
                    <select class="form-control" name="series_id">
                        @foreach ($series as $series)
                            <option value="{{$series->id}}">{{$series->name}}</option>
                        @endforeach
                    </select>
                </div>
                 <div class="form-group">
                    <label for="season_id">Seasons</label>
                    <select class="form-control" name="season_id">
                        @foreach ($seasons as $seasons)
                            <option value="{{$seasons->id}}">{{$seasons->name}}</option>
                        @endforeach
                    </select>
                </div>
                
                <div class="form-group">
                    <label for="name">Name</label>
                    <input type="text" class="form-control" name="name" id="name">
                </div>
                <div class="form-group">
                    <label for="about">About</label>
                    <textarea name="about" id="" class="form-control" cols="30" rows="10">About</textarea>
                </div>
                <div class="form-group">
                    <label for="subtitle">Subtitle</label>
                    <input type="text" class="form-control" name="subtitle">
                </div>
                <div class="form-group">
                    <label for="serno">Serial Number</label>
                    <input type="text" class="form-control" name="serno">
                </div>
                <div class="row">
                    <div class="col-md">
                        <div class="form-group">
                            <label for="subtitle">URL 1</label>
                            <input type="text" class="form-control" name="subtitle">
                        </div>
                    </div>
                    <div class="col-md">
                        <div class="form-group">
                            <label for="subtitle">URL 2</label>
                            <input type="text" class="form-control" name="subtitle">
                        </div>
                    </div>
                    <div class="col-md">
                        <div class="form-group">
                            <label for="subtitle">URL 3</label>
                            <input type="text" class="form-control" name="subtitle">
                        </div>
                    </div>
                </div>
                
                    <label for="image">Image</label>
                    <input type="file" name="image" class="form-control">

                <button type="submit" class="btn btn-primary">Save</button>
            </form>
        </div>
    </div>
</div>
@endsection

Вот функция для создания:

public function create()
    {
        $seasons = Season::all();
        $series = Series::all();
        return view('admin.episodes.create', compact('seasons', 'series'));
    }

Теперь я хочу сделать что-то с серией, где я выбираю сезоны из Season :: all а затем показать сериал из сезона, который я выбрал.
РЕДАКТИРОВАТЬ: Вот как выглядят мои миграции:
Серия:

Schema::create('series', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('slug');
            $table->string('about');
            $table->string('image');
            $table->timestamps();
        });

Сезоны:

Schema::create('seasons', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->integer('series_id');
            $table->string('name');
            $table->string('slug');
            $table->string('subtitle');
            $table->string('about');
            $table->string('image');
            $table->integer('serno');
            $table->timestamps();
        });

Эпизоды:

Schema::create('episodes', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->integer('series_id');
            $table->integer('season_id');
            $table->string('name');
            $table->string('slug');
            $table->string('subtitle');
            $table->string('about');
            $table->string('image');
            $table->integer('serno');
            $table->string('url');
            $table->string('url2');
            $table->string('url3');
            $table->string('medium');
            $table->string('medium2');
            $table->string('medium3');
            $table->timestamps();
        });

1 Ответ

1 голос
/ 17 февраля 2020

серия имеет несколько сезонов. так что вам нужен зависимый выпадающий список для сезонов при создании нового эпизода. Вы можете использовать ajax запрос на загрузку зависимых раскрывающихся данных выбора. когда серия будет выбрана, запрос пройдет и будут возвращены сезоны для этой серии.

, поэтому начинаем с формы

<div class="form-group">
    <label for="series_id">Series</label>
    <select class="form-control" name="series_id" id="series_id">
        @foreach ($series as $series)
            <option value="{{$series->id}}">{{$series->name}}</option>
        @endforeach
    </select>
</div>
<div class="form-group">
    <label for="season_id">Seasons</label>
    <select class="form-control" name="season_id" id="season_id">
        <option value="">Select</option>
    </select>
</div>

секция сценария

<script src="https://code.jquery.com/jquery-3.4.1.min.js"
  integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
  crossorigin="anonymous"></script>
<script>
    $('#series_id').change(function(){
        var id = $(this).val();
        var url = '{{ route("getSeasons", ":id") }}';
        url = url.replace(':id', id);

        $('#season_id').find('option').not(':first').remove();
        $.ajax({
           url: url,
           type: 'get',
           dataType: 'json',
           success: function(response){
               var len = 0;
               if(response != null){
                   len = response.length;
               }
               else {
                   alert('sorry, no seasons were found for this series');
               }
               if(len > 0){
                   for(var i=0; i<len; i++){
                       var id = response[i].id;
                       var name = response[i].name;
                       var option = "<option value='"+id+"'>"+name+"</option>"; 
                       $("#season_id").append(option); 
                   }
               }
            }
        });
    });
</script>

маршрут в сети. php файл

Route::get('getseasons/{id}', 'YourController@getSeasons')->name('getSeasons');

и код контроллера

public function getSeasons($id=0){
    $data = Season::where('series_id',$id)->get();
    return response()->json($data);
}

не стесняйтесь спрашивать все, что вы не понимаете:)

...