在Laravel 5中为Select2.js格式化JSON响应

时间:2017-02-17 12:16:29

标签: php ajax laravel-5 jquery-select2

我正在填充城市列表(在从下拉列表中选择一个县之后),使用与Laravel 5.2和Select2.js的Ajax调用。

我想格式化来自ajax调用的JSON响应,以便它与Select2标准相匹配,以便在下拉列表中显示(idtext

这是我的控制器:

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"}
]

我只需要检索列idtitle,因此我使用->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"}
]

我知道我可以使用JavaScript和Select2 ->get()来格式化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 个答案:

答案 0 :(得分:2)

使用select('id','title')

    $county = County::findOrFail($request->input('county_id'));
    $cities = $county->cities()->select('id','title')->orderBy('title', 'ASC')->get();
    return response()->json($cities);