Форматирование 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);