Laravel - Как устранить общую внутреннюю ошибку, когда значение равно NULL - PullRequest
0 голосов
/ 31 марта 2020

В моем 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()
                    ->id;

    $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()
                    ->parent_id;

    $childid = DB::table('appraisal_goal_types')
                    ->select('id')
                    ->where('company_id', $userCompany)
                    ->where('id', $request->id)
                    ->first()
                    ->id;

   if(empty($child)) {
       abort(404);
   }

   $weightedscore = 0;
   $weightedscore = DB::table('appraisal_goals')
                        ->select(DB::raw("IFNULL(SUM(weighted_score),0) as weighted_score"))
                        ->where('appraisal_identity_id', $identities)
                        ->where('employee_id', $userEmployee)
                        ->where('parent_id', $parentid)
                        ->first();

   $weightedscorex = 0;
   $weightedscorex = DB::table('appraisal_goals')
                        ->select('weighted_score')
                        ->where('appraisal_identity_id', $identities)
                        ->where('employee_id', $userEmployee)
                        ->where('id', $childid)
                        ->first();

   $maxscore = DB::table('appraisal_goal_types')
                    ->select('max_score')
                    ->find($child->parent_id);

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

Когда я запускаю код, я получаю эту ошибку:

jquery .min . js: 2 GET http://localhost: 8888 / laraproject / get / findScore? Id = 2 500 (внутренняя ошибка сервера)

Затем я обнаружил, что ошибка находится в этой строке:

$weightedscorex = DB::table('appraisal_goals')
                    ->select('weighted_score')
                    ->where('appraisal_identity_id', $identities)
                    ->where('employee_id', $userEmployee)
                    ->where('id', $childid)
                    ->first();

, поскольку значение равно нулю, а таблица пуста.

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

Спасибо

Ответы [ 2 ]

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

Как указано в комментариях, вам необходимо вернуть abort как

Функция прерывания выдает исключение HTTP, которое будет обработано обработчиком исключения:

Вы можете сделать это с помощью

if(is_null($child)) {
   return response()->json([
       'message' => 'Child not found'
   ], 404);
}

или если вы хотите использовать abort, просто убедитесь, что ваш запрос ожидает ответа json.

$.ajax({
    headers: {
        Accept: "application/json",
    },
    ...
});

PS:

$parentid = DB::table('appraisal_goal_types')
                ->select('parent_id')
                ->where('company_id', $userCompany)
                ->where('id', $request->id)
                ->first()
                ->parent_id;

$childid = DB::table('appraisal_goal_types')
                ->select('id')
                ->where('company_id', $userCompany)
                ->where('id', $request->id)
                ->first()
                ->id;

приведенный выше запрос не является необходимым, поскольку вы можете получить атрибут из дочернего объекта в виде $child->parent_id и $child->id

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

Попробуйте изменить эту строку:

   if(empty($child))

на:

   if(is_null($child))

также вы можете изменить свой код, например, вы можете сделать это:

    $appraisal_goal_type = DB::table('appraisal_goal_types')->select('id', 'parent_id')->where('company_id', $userCompany)->where('id', $request->id)->first();
    // so you can use $appraisal_goal_type->parent_id; instead of $parentid
    // so you can use $appraisal_goal_type->id; instead of $childid

ОБНОВЛЕНИЕ

Правильное решение:

    if(is_null($child) || is_null($childid))
    {
        abort(404);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...