Laravel - GET http://localhost: 8888 / appraisal_appraisal_goals / maxScore? Goal_type_id = 2 404 (не найдено) - PullRequest
0 голосов
/ 02 марта 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;

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

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

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

public function maxScore(Request $request)
{
    $userCompany = Auth::user()->company_id;    
    $type = AppraisalGoalType::where('company_id', $userCompany)->with('parent')->find($request->id);
    $maxScore = $type->max_score ?:$type->parent->max_score ;

        return response()->json([
            'maxscore' => $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->belongsTo(App\Models\Appraisal\AppraisalGoalType::class, 'parent_id');
  }    
}

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

route / web. php

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

create. клинок. 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" value="max_score" class="form-control" >

 </form>

    <script type="text/javascript">
        $(document).ready(function(){

            $("#goal_type").on('change', function postGoalType(){

                var goal_type_id = $(this).val(); 

                $.ajax({ 
                    url: 'maxScore', //your endpoint
                    data: { goal_type_id: goal_type_id }, //data being passed
                    type: 'get'
                }).done(function(responseData) {

                  $('#max_score').val(responseData.maxscore); //populate the max_score input

                }).fail(function() {

                    console.log('Failed');

                });
            });

        });            
    </script>

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

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

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

GET http://localhost: 8888 / appraisal_goals / maxScore? Goal_type_id = 3 404 (не найден)

Как мне его решить?

Спасибо.

1 Ответ

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

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

$.ajax({ 
    url: '{{ route('appraisal.appraisal_goals.maxScore') }}',
    data: { goal_type_id: goal_type_id },
    type: 'get'
}).done(function(responseData) {
    $('#max_score').val(responseData.maxscore);
}).fail(function() {
    console.log('Failed');
});

и изменить вашу maxScore функцию

public function maxScore(Request $request)
{
    $userCompany = Auth::user()->company_id;    
    //$type = AppraisalGoalType::with('parent')->where('company_id', $userCompany)->where('id', $request->id)->first(); 
    //the where clauses are not necessary actually. you can do it just like
    $type = AppraisalGoalType::find($request->id);
    $maxScore = $type->parent->max_score;

    return response()->json([
        'maxscore' => $maxScore,
    ]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...