Ответ Laravel Json не работает должным образом

Невозможно получить ответ, пока объект ответа пуст. Идеально работает, когда объект возвращает данные.

public function show($id)
{
    $associates = Associate::find_by_id($id);
    if(count($associates)<1)
    {
        $output = array('message' => 'No Records Found');
        $status = 204;

    }
    else{
        $output = array('message' => 'success','data'=>$associates);
        $status = 200;
    }
    return response()->json($output,$status);
}

Нет ответа, когда объект $ associate пуст. Ответ, когда $ associate не пусто:

{
"message": "success",
"data": [
    {
        "first_name": "xxx",
        "last_name": "xxx",
        "mobile": xxxxxxxxxx,
        "email": "xxxxxx@xxxxx",
        "city": "xxxxx",
        "state": "xxxxxx",
        "pincode": "xxxxx"
    }
  ]
}

person Harsh Gajjar    schedule 06.11.2018    source источник
comment
попробуйте использовать Associate::find($id) вместо find_by_id   -  person Derek Pollard    schedule 06.11.2018
comment
@DerekPollard Я использую объединение нескольких таблиц для этого результата, могу ли я использовать Associate :: find ($ id) с объединениями?   -  person Harsh Gajjar    schedule 06.11.2018


Ответы (3)


У меня была такая же проблема с кодом состояния 204. Я считаю, что это вызвано здесь. Затем класс Illuminate \ Foundation \ Application перехватывает это и генерирует исключение HttpException.

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

return Response::make("", 204);

Возврат пустого сообщения. проверьте status_code в своем коде, чтобы отображать сообщение во внешнем интерфейсе.

person Raza Rafaideen    schedule 06.11.2018

Будет проще, если вы воспользуетесь привязкой модели маршрута, чтобы найти идентификатор записи. Для получения дополнительной информации см. https://laravel.com/docs/5.7/routing#route-model-binding.

Я думаю, что приведенный ниже фрагмент должен работать.

if ($associates) {
    $output = array('message' => 'success','data'=>$associates);
    $status = 200;
} else {
    $output = array('message' => 'No Records Found');
    $status = 204;
}
person Community    schedule 06.11.2018

Я переписал функцию для вашей справки.

КСТАТИ. Если функция возвращает только одну запись, используйте существительное в единственном числе для имени переменной в целом.

public function show($id)
{
    // Use find() instead of find_by_id()
    $associate = Associate::find($id);

    // $associate will be null if not matching any record.
    if (is_null($associate)) {

        // If $associate is null, return error message right away.
        return response()->json([
            'message' => 'No Records Found',
        ], 204);
    }

    // Or return matches data at the end.
    return response()->json([
        'message' => 'success',
        'data' => $associate,
    ], 204);
}
person Kenny    schedule 07.11.2018
comment
не работает, пробовал. И да, я использую несколько объединений, поэтому я использую свою пользовательскую функцию модели. - person Harsh Gajjar; 07.11.2018
comment
Хорошо, теперь я понимаю, почему вы используете пользовательскую функцию. Но какое значение вернется, если в вашей функции нет сопоставления ни одной записи? Я считаю, что ключом может быть ценность. - person Kenny; 08.11.2018