2017-10-05 3 views
0

Mein Code hat Json-Spalte namens: Json für benutzerdefinierte Benutzerfelder. Ich möchte, dass meine Datentabelle diese json-Spalte als einzelne Felder zur Anzeige erhält. So im Wesentlichen, wenn mein Modell gibt Daten wie:Laravel-JSON-Feld für Modellattribute für Datentabelle mit Paginieren

{ 
"id":1 
"json" : { 
    "name": "joe"  
    } 
} 

Ich brauche es zu transformieren, wie (wenn ich Modell nennen :: alle() oder Modell :: Paginieren()):

{ 
"id":1 
"name": "joe" 
} 

so dass Mein Datatable kann diese Daten anzeigen. Ich kann meinem Modell keine anhängige Eigenschaft hinzufügen, da dieses jsons dynamisches Feld ist und daher nicht von Anfang an bekannt ist. Ich habe diese zwei Varianten ausprobiert:

public function getJsonAttribute($value) 
{ 
    $json = json_decode($value); 
    foreach ($json as $k => $v) { 

     array_push($this->appends, $key); 
     // or 
     $this->attributes[$k] = $v; 
    } 
    return $json; 
} 

Aber keiner von ihnen funktioniert.

Antwort

2

In Ihrem Fall kann dies Arbeit sein. Aber seine Multi-Array bedeutet, dass Sie eine weitere foreach-Schleife hinzufügen können. dann arbeite nur.

In Ihrem Code Schlüssel $ definiert nicht

public function getJsonAttribute($value) 
{ 
    $json = json_decode(json_encode($value),TRUE); 
    $jsonArr = []; 
    foreach ($json as $k => $v) { 
     if($k == "id") 
      $jsonArr['id'] = $v; 
     if($k == "json" && empty($v['name']) === false) 
      $jsonArr['name'] = $v['name']; 
    } 

    return (object)$jsonArr; 
} 
+1

Oh Dank über diese Tippfehler auf ** $ key **. Obwohl Ihr Code das Standard-Ding macht. Json würde mir bereits ein assoziatives Array von key => value-Paaren zurückgeben, so dass ich es nicht erneut in ein Array konvertieren muss, um zurückzukehren. Ich löste es, indem ich die Sammlung durchschlinge und eine Funktion auf allen Instanzen des Modells ausführe, das die foreach-Schleife ausführt, die ich auf ** getJsonAttribute ** angewendet habe. –

Verwandte Themen