2017-02-17 7 views
-1

Ich beziehe eine Stadtliste (nachdem ich einen Kreis aus einem Dropdown ausgewählt habe) unter Verwendung eines Ajax-Aufrufs mit Laravel 5.2 und Select2.js.Formatieren der JSON-Antwort in Laravel 5 für Select2.js

Ich mag die JSON-Antwort von dem Ajax-Aufruf zu formatieren, damit es die Select2 Kriterien für die Anzeige auf einer Drop-Down-Liste übereinstimmt (id, text)

Hier ist mein Controller:

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); 
    } 
} 

Es funktioniert Fein- und Rückkehr eine Liste der Städte:

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

ich brauche nur die Spalten abrufen id und title, so verwende ich ->pluck('title', 'id')

Es gibt diese:

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

Um die Ergebnisse zu auf meiner Auswahloptionen Liste korrekt angezeigt, mit Select2, ich die Ergebnisse müssen wie folgt zurück:

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

Ich weiß, dass ich die Ergebnisse aus dem Array ->get() mit JavaScript und Select2 processResults formatieren kann, aber ich möchte es mit dem Controller zu tun, so dass es die JSON-Antwort direkt formatiert.

Hier ist eine vereinfachte Version meiner 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 
      }); 
     } 
    }); 
}); 

Das Skript fast einwandfrei funktioniert, nur die data Bedürfnisse formatiert werden.

Meine Frage:

Wie die JSON-Antwort in der Steuerung zu formatieren, so dass es [{"id":1,"text":"City 1"}] statt [{"id":1,"title":"City 1","slug":"city-1"}]

+0

BTW 'formatting' bedeutet etwas anderes, als was du denkst. –

+0

@MarcinOrlowski Bedeutet es nur "Löschen" wie bei "Formatieren einer Festplatte"? Ich sollte vielleicht "Ausgabe" verwenden. Mein Englisch ist noch nicht Punkt :) – PhilMarc

+0

http://www.dictionary.com/browse/formatting –

Antwort

1

Verwenden kehrt select('id','title')

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

Funktioniert perfekt, danke. Gibt es nun eine Möglichkeit, 'title' in' text' zu ändern? (das war auch in meiner Frage) – PhilMarc

+1

Change 'select ('id', 'title')' zu 'select ('id', 'title as text')' – C2486

+0

Sorry für unhöflich sein, danke für die Hilfe Kumpel! – PhilMarc