Laravel - Как извлечь значение из json в моем Laravel коде - PullRequest
2 голосов
/ 04 марта 2020

В моем Laravel -5,8 я передал данные из контроллера для просмотра, используя JSON.

Я использую Laravel -5,8 для проекта веб-приложения.

Я пытаюсь изменить значение загрузки в раскрывающемся текстовом поле при изменении.

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

    $identities                     = DB::table('appraisal_identity')->select('id')->where('company_id', $userCompany)->where('is_current', 1)->first();     
    $child  = DB::table('appraisal_goal_types')->where('company_id', $userCompany)->where('id',$request->id)->first();
    $parentid  = DB::table('appraisal_goal_types')->select('parent_id')->where('company_id', $userCompany)->where('id',$request->id)->first();
   if(empty($child))
   {
       abort(404);
   }  
   $weightedscore = DB::table('appraisal_goals')->select(DB::raw("SUM(weighted_score) as weighted_score"))->where('appraisal_identity_id', $identities)->where('employee_id', $userEmployee)->where('parent_id', $parentid)->get();
    $maxscore = DB::table('appraisal_goal_types')->select('max_score')->find($child->parent_id);
    return response()->json([
        'maxscore' => $maxscore->max_score,
        'weightedscore' => $weightedscore
    ]);        
}

Я отправляю max_score и weighted_score как JSON.

route:

Route :: get ('get / findScore', 'Appraisal \ AppraisalGoalsController@findScore') -> name ('get.scores.all'); view blade

 <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" >
<input type="text" id="weighted_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: '{{ route('get.scores.all') }}',
            data: { 'id': air_id },
            dataType: 'json',      //return data will be json
            success: function(data) {
                // console.log("price");
                console.log(data.maxscore);
                console.log(data.weightedscore);
                 $('#max_score').val(data.maxscore);
                 $('#weighted_score').val(data.weightedscore);
            },
            error:function(){

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

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

GET http://localhost:8888/peopleedge/get/findScore?id=2 500 (Internal Server Error).

Затем я получил это на моем консоль:

weighted error

и текстовое поле:

textbox error

Мне нужно прямое значение, отображаемое в тексте, а не объект JSON, как показано на рисунке. Например, в текстовом поле только 60.

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

Спасибо.

Ответы [ 3 ]

2 голосов
/ 04 марта 2020

$weightedscore - это объект, поэтому вы должны сделать то же самое для $weightedscore, что вы делаете для $maxscore: добавить атрибут, а не объект к ответу.

Изменить $weightedscore на $weightedscore->weighted_score в части return.

return response()->json([
    'maxscore' => $maxscore->max_score,
    'weightedscore' => $weightedscore->weighted_score
]);    

Вы можете вывести $weightedscore перед возвратом, используя var_dump($weightedscore); или print_r($weightedscore);, и тогда вы увидите, что это объект, имеющий атрибут называется weighted_score, как указано в вашей SELECT ... as() части вашего заявления SQL.

1 голос
/ 04 марта 2020

, поскольку это массив, следовательно, он будет

$ ('# max_score'). Val (data.maxscore ['maxscore']); $ ('# weighted_score'). val (data.weightedscore ['weightedscore'] [0]);

['weightedscore'] = имя ключа, которое вы дали на контроллере

$.ajax({
                type: 'get',
                url: '{{ route('get.scores.all') }}',
                data: { 'id': air_id },
                dataType: 'json',      //return data will be json
                success: function(data) {
                    // console.log("price");
                    console.log(data.maxscore);
                    console.log(data.weightedscore);
                     $('#max_score').val(data.maxscore['maxscore']);
                     $('#weighted_score').val(data.weightedscore['weightedscore'][0]);



                },
                error:function(){

                }
            });
0 голосов
/ 04 марта 2020

просто измените это и увидите волхвов c $weightedscore->weighted_score

return response()->json([
     'maxscore' => $maxscore->max_score,
     'weightedscore' => $weightedscore
]); 

К

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