Форматирование JSON-ответа в Laravel 5 для Select2.js

Я заполняю список городов (после выбора округа из выпадающего списка), используя вызов Ajax с Laravel 5.2 и Select2.js.

Я хочу отформатировать ответ JSON от вызова ajax, чтобы он соответствовал критериям Select2 для отображения в раскрывающемся списке (id,text)

Вот мой контроллер:

public function postCounty(Request $request)
{
    if($request->ajax()) 
    {
        $county = County::findOrFail($request->input('county_id'));
        $cities = $county->cities()->orderBy('title', 'ASC')->get();
        return response()->json($cities);
    }
}

Работает нормально и возвращает список городов:

[
    {"id":1,"title":"City 1","slug":"city-1"},
    {"id":2,"title":"City 2","slug":"city-2"},
    {"id":3,"title":"City 3","slug":"city-3"}
]

Мне нужно получить только столбцы id а также titleвот и пользуюсь ->pluck('title', 'id')

Это возвращает это:

{"1":"City 1","2":"City 2","3":"City 3"}

Чтобы правильно отобразить результаты в моем списке параметров выбора, используя Select2, мне нужно, чтобы результаты возвращались следующим образом:

[
    {"id":"1","text":"City 1"},
    {"id":"2","text":"City 2"},
    {"id":"3","text":"City 3"}
]

Я знаю, что могу отформатировать результаты ->get() массив, используя JavaScript и Select2 processResults, но я хочу сделать это с помощью контроллера, чтобы он форматировал ответ JSON напрямую.

Вот упрощенная версия моего JS:

$("#countyFilter").select2().on("select2:selecting", function(e) {
    var county_id = $(this).val();
    $.ajax({
        type:'GET',
        url: 'mysite.com/api/county',
        data: {county_id:county_id},
        success: function(data){
            $("#populateCities").select2({
                data:data
            });
        }
    });
});

Этот скрипт работает почти нормально, только data должен быть отформатирован.

Мой вопрос:

Как отформатировать ответ JSON в контроллере, чтобы он возвращался [{"id":1,"text":"City 1"}] вместо [{"id":1,"title":"City 1","slug":"city-1"}]

1 ответ

Решение

Использование select('id','title')

    $county = County::findOrFail($request->input('county_id'));
    $cities = $county->cities()->select('id','title')->orderBy('title', 'ASC')->get();
    return response()->json($cities);
Другие вопросы по тегам