GET http://localhost: 8888 / оценка / appraisal_goals / findScore? Id = 2 404 (не найдено) в Laravel - PullRequest
0 голосов
/ 03 марта 2020

Я уже несколько часов бьюсь над этим кодом Laravel -5.8:

CREATE TABLE `appraisal_goal_types` (
 `id` int(11) NOT NULL,
 `name` varchar(200) NOT NULL,
 `parent_id` int(11) DEFAULT NULL,
 `max_score` int(11) DEFAULT 0,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Диаграмма таблицы: table diagram

CREATE TABLE `appraisal_goals` (
  `id` int(11) NOT NULL,
  `goal_type_id` int(11) DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Из таблицы, если parent_id равен нулю, строка является родительской. Каждое дочернее поле будет иметь свой parent_id. Родитель может иметь много дочерних строк. Кроме того, только родитель может иметь значение для max_score. Дочерний элемент будет иметь значение 0 по умолчанию для max_score

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

Я написал эту функцию в моем контроллере

public function findScore(Request $request)
{
    $userCompany = Auth::user()->company_id;
    $child  = DB::table('appraisal_goal_types')->where('company_id', $userCompany)->find($request->id) or abort(404);
    $maxscore = DB::table('appraisal_goal_types')->select('max_score')->find($child->parent_id);
    return response()->json($maxscore);
}

public function create()
{
    $userCompany = Auth::user()->company_id;
    $userEmployee = Auth::user()->employee_id;

    $identities = DB::table('appraisal_identity')->select('id','appraisal_name')->where('company_id', 
$userCompany)->where('is_current', 1)->first();

  $goaltypes   =       AppraisalGoalType::where('company_id', $userCompany)->get(); 
 $categories = AppraisalGoalType::with('children')->where('company_id', $userCompany)->whereNull('parent_id')->get();

return view('appraisal.appraisal_goals.create')
        ->with('goaltypes', $goaltypes)
        ->with('categories', $categories)
        ->with('identities', $identities)
        ;
}

Модель

class AppraisalGoalType extends Model
{
  protected $table = 'appraisal_goal_types';
  protected $primaryKey = 'id';

  protected $fillable = [
          'name',
          'company_id',
          'parent_id',
          'max_score',
      ];

  protected $casts = [];

  public function children()
  {
    return $this->hasMany('App\Models\Appraisal\AppraisalGoalType', 'parent_id');
  }

  public function parent()
  {
      return $this->hasOne(App\Models\Appraisal\AppraisalGoalType::class, 'id', 'parent_id');
  }  
}

Я отправляю max_score как json.

route / web. php

Route :: get ('/ appraisal / appraisal_goals / findScore', 'Appraisal \ AppraisalGoalsController@findScore');

create.blade. php

  <form  action="{{route('appraisal.appraisal_goals.store')}}" method="post" class="form-horizontal" enctype="multipart/form-data">
   {{csrf_field()}}
   
   <div class="card-body">
    <div class="form-body">
    <div class="row">
        
      <div class="col-12 col-sm-6">
        <div class="form-group">
          <label class="control-label"> Goal Type:<span style="color:red;">*</span></label>
          <select id="goal_type" class="form-control" name="goal_type_id">
            <option value="">Select Goal Type</option>

            @foreach ($categories as $category)
            @unless($category->name === 'Job Fundamentals')
              <option hidden value="{{ $category->id }}" {{ $category->id == old('category_id') ? 'selected' : '' }}>{{ $category->name }}</option>

              @if ($category->children)
                @foreach ($category->children as $child)
                @unless($child->name === 'Job Fundamentals')
                  <option value="{{ $child->id }}" {{ $child->id == old('category_id') ? 'selected' : '' }}>&nbsp;&nbsp;{{ $child->name }}</option>
                @endunless
                @endforeach
              @endif
              @endunless
            @endforeach
          </select>
        </div>
      </div>    

<input type="text" id="max_score" class="form-control" >

</form>

    <script type="text/javascript">
    $(document).ready(function() {
        $(document).on('change', '#goal_type', function() {
            var air_id =  $(this).val();

            var a = $(this).parent();

            console.log("Its Change !");

            var op = "";

            $.ajax({
                type: 'get',
                url: 'findScore',
                data: { 'id': air_id },
                dataType: 'json',      //return data will be json
                success: function(data) {
                    // console.log("price");
                    console.log(data.max_score);

                    a.find('#max_score').val(data.max_score); 
                    // do you want to display id or registration name?
                },
                error:function(){

                }
            });
        });
    });
    </script>

Развернуть фрагмент

Дочерний объект не имеет значения для max_score, но родительский имеет. Когда дочернее поле выбрано, я хочу загрузить max_score его родителя.

Функция findScore в контроллере состоит в том, чтобы выбрать max_score родителя запрошенного идентификатора дочернего элемента.

Однако, когда я нажимаю на раскрывающийся список, чтобы загрузить max_score родителя с соответствующим идентификатором goal_type_id, я получаю эту ошибку в консоли:

GET http://localhost: 8888 / peopleedge / оценка / appraisal_goals / findScore? id = 2 404 (не найдено)

Как мне решить эту проблему?

Спасибо.

1 Ответ

0 голосов
/ 03 марта 2020

маршрут

Route::get('appraisal/appraisal_goals/findScore','Appraisal\AppraisalGoalsController@findScore')->name('findScore');

и ajax URL

$.ajax({
   type: 'get',
   url: '{{ route('findScore') }}',
   ......
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...