Laravel, не могу понять, как отображать предметы определенного года с выпадающим - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь выяснить, как получить все предметы определенного года с помощью ajax, jquery в Laravel.

У меня есть три таблицы в базе данных:

years: id, name
subjects: id, name
year_subject: id, year_id , subject_id 

Вот модели:

Year.php
Subject.php
YearSubject.php 

Вот функция в контроллере

public function get_subjects($id)
{
   $sub = YearSubject::where("year_id", $id)->pluck("subject_id");
   $subjects=Subject::where('$id',$sub)->pluck('name','id');
        foreach($sub as $s)
        {
           $subjects= Subject::where('$id',$s)->pluck('name','id');
        }
   return json_encode($subjects);
}

  <script type="text/javascript">
       $(document).ready(function () {
         $('#grade').on('change', function () {
            var gradeID = $(this).val();
            $('#subject').empty();
            if (gradeID) {
              $.ajax({
                url: '{{url('get_subjects')}}' + '/' + gradeID,
                type: "GET",
                dataType: "json",
                success: function (data) {
                    $.each(data, function (key, value) {
                    $('#subject').append('<option value="' + key + '">' + value + '</option>');
                       });
                    }
                 });
             } else {
                  $('#subject').empty();
              }
        });
     });
</script>
 <select  id="grade" name="grade" required>
     <option value="" disabled selected> Choose Year</option>
      @foreach($grades as $grade)
        <option value="{{$grade->id}}">{{$grade->name}}</option>
      @endforeach
</select>
<select  name="subject"  id="subject" >
   <option value="">Choose Subject </option>
</select>

Вот маршрут

Route::get('get_subjects/{id}', 'SubjectController@get_subjects')->name('get_subjects');

Я думаю, ошибка в контроллере. Не могу понять, как выдвинуть значения в $ subject.

1 Ответ

0 голосов
/ 15 сентября 2018

Измените ваши модели, как показано ниже-

Year.php

class Year extends Model{
    public $primaryKey = 'id';
    public $timestamps = true;
    protected $table = 'years';
    public function subjects(){
        return $this->belongsToMany('year_subject','year_id','subject_id');
    }
}

Subject.php

class Subject extends Model{
    public $primaryKey = 'id';
    public $timestamps = true;
    protected $table = 'subjects';

    public function years(){
        return $this->belongsToMany('year_subject','subject_id','year_id');
    }
}

Ваш метод управления:

public function get_subjects($year_id){
    $subject_data = [];
    foreach(Year::where('id',$year_id)->subjects() as $each_subject_data){
        $subject_data[] = [
                'subject_id'   => $each_subject_data->id,
                'subject_name' => $each_subject_data->name
        ];
    }

    return response(json_encode($subject_data),200)
                                    ->header('Content-Type','application/json');
}

ПРИМЕЧАНИЕ: На вкладке сети вашего браузера вы можете проверить элемент и проверить, какой JSON вы получаете, и соответственно изменить желаемый формат JSON в методе контроллера.

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