как отформатировать мои возвращенные данные с помощью laravel для определенного формата - PullRequest
0 голосов
/ 15 сентября 2018
public function autoComplete(Request $request) {
    $keywords = $request->keywords;
    $phones = [];
    $results = Phone::where('number', 'LIKE', '%' . $keywords . '%')->get();

    if ($results) {
        foreach ($results AS $phone) {
            $phones[] = [
                'id' => $phone->id,
                'text' => $phone->number,
            ];
        }
    }
    return json_encode($phones);
}

предыдущий метод возвращает следующий формат JSON

[["01111111111"],["01222222222"],["03333333333"],["04444444444"]]

Но я хочу вот так

{"suggestions":["01111111111", "01222222222", "03333333333", "04444444444"]} 

Я пытался сделать возврат вот так

return json_encode('suggestions:', $phones);

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Если этот метод в контроллере, просто верните массив, то есть:

return ['suggestions' => $phones]

И Laravel вернет его как JSON.

0 голосов
/ 15 сентября 2018

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

, поэтому я дам это краткое решение, здесь мы изменим ваш foreach на map function

, для этого ваша функция autoComplete будет выглядеть следующим образом:

public function autoComplete(Request $request) {
    $keywords = $request->keywords;

    $results = Phone::where('number', 'LIKE', '%' . $keywords . '%')->get();

    if ($results) {
        $phones =  $results->map(function($phone) {
            return [
                'id' => $phone->id,
                'text' => $phone->number,
            ];
        });

    }

    return response()->json(['suggestions' => $phones], 201);
}

мы возвращаем 201 http code, чтобы доказать, что запрос был создан с успехом.

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