2017-02-07 2 views
1

unten ist die Json vom ControllerDrucke verschachtelten JSON-Daten in Laravel Ansicht

JSon Daten

[ 
     { 
      "id":2, 
      "firstname":"abc", 
      "lastname":"def", 
      "email":"[email protected]", 
      "role":1, 
      "university":1, 
      "school_dept":5, 
      "year":2, 
      "photo":"URL", 
      "bio":"ObxBJIDO6IfOU0DIw8a5", 
      "search_status":"available", 
      "created_at":null, 
      "updated_at":null, 
      "languages":[ 
      { 
       "id":3, 
       "language":"Spanish", 
       "pivot":{ 
        "user_id":2, 
        "language_id":3, 
        "type":"native" 
       } 
      }, 
      { 
       "id":4, 
       "language":"Greek", 
       "pivot":{ 
        "user_id":2, 
        "language_id":4, 
        "type":"learn" 
       } 
      } 
      ], 
      "hobbies":[ 
      { 
       "id":2, 
       "hobby":"Basketball", 
       "pivot":{ 
        "user_id":2, 
        "hobbie_id":2 
       } 
      }, 
      { 
       "id":3, 
       "hobby":"Skiing", 
       "pivot":{ 
        "user_id":2, 
        "hobbie_id":3 
       } 
      }, 
      { 
       "id":4, 
       "hobby":"Running", 
       "pivot":{ 
        "user_id":2, 
        "hobbie_id":4 
       } 
      } 
      ], 
      "universities":{ 
      "id":1, 
      "university":"some Uni" 
      }, 
      "years":{ 
      "id":2, 
      "year":"2nd" 
      }, 
      "departments":{ 
      "id":5, 
      "department":"Languages and Intercultural Studies" 
      } 
     } 
    ] 

ich in der Lage bin zu sehen zurück-ID zu ziehen, Vorname, Nachname, E-Mail, ... zuerst Level-Daten

@foreach($users as $user) 
<tr> 
     <td>{{$user->firstname}} </td> 
     <td>{{$user->lastname}} </td> 
     <td>{{$user->email}} </td> 
     <td>{{$user->photo}} </td> 
     <td>{{$user->bio}} </td> 
     <td></td> 
    </tr> 

@endforeach 

auch Abteilungen, die Universität und Jahren zweite Ebene verschachtelte Daten

<td>{{$user['universities']->university}} </td> 
<td>{{$user['departments']->department}} </td> 
<td>{{$user['languages']->language}} </td> 
<td>{{$user['years']->year}} </td> 

Aber, wie man verschachtelte Daten der dritten Ebene plus seine Art des Feldes zieht.

zum Beispiel: Hobbys und Sprachen beide.

Ich mag wie Sprachen zeigen: lernen: Englisch und teach: Französisch dies durch Überprüfung erreicht werden muss, wenn Typ-Feld in der Sprache Array mit einem Feld namens Typ lernen oder lehren. Dies zeigt an, ob ein Benutzer eine bestimmte Sprache lernen oder diese Sprache unterrichten möchte. Alle Benutzer haben beide Arten lernen und unterrichten.

Auch für die Liste der Hobbys wie: hobby1, hobby2, Hobby3, ...

Ich möchte diesen am meisten sauberste zeigen und effizient wie möglich

Unten ist die Technik, die ich bin versuchen, Daten der Ebene 3 zu zeigen, aber wenn die Bedingung nicht zu funktionieren scheint. Ich muss die Sprache nach dem Typ bekommen.

@foreach($user->languages as $langs) 
    @if($langs['pivot']->type =='native') 
    <td>{{$langs['pivot']->language_id}}</td> 
    @else 
    <td>{{$langs['pivot']->language_id}}</td> 
    @endif 
@endforeach 

Antwort

0

Sie können json zu Array ändern:

$user = json_decode($jsonData, true); 

Erste Ebene:

$user["firstname"]; 
$user["lastname"]; 

Zweite Ebene:

$user["universities"]["university"]; 
$user["departments"]["department"]; 

Dritte Ebene:

foreach ($user["languages"] as $language) { 
    if ($language["pivot"]["type"] == "native") { 
     $language["language"]; 
    } else { 
     $language["language"]; 
    } 
} 
+0

können Sie zeigen, wie die Sprache abhängig von der Art zu erhalten. Ich möchte drucken, wenn type = Print-Sprache lernen, die sonst Sprache nativ lernen soll.Vorgehensweise, da die Bedingung (der Typ) innerhalb des Pivots liegt, der Wert jedoch außerhalb des Pivots, aber innerhalb der Sprache liegt. –

+0

Ich bearbeite Dritte Ebene, ist das was du willst? –

1

Ich hatte ähnliches Problem in Laravel, um eine Bild-URL zu extrahieren. Aber ich brauchte die for-Schleife nicht. Also dachte ich, ich poste das Beispiel.

Wetter JSON.

{ 
    "coord": { 
    "lon": -97.29, 
    "lat": 32.63 
    }, 
    "weather": [ 
    { 
     "id": 800, 
     "main": "Clear", 
     "description": "clear sky", 
     "icon": "02d" 
    } 
    ], 
    "base": "stations", 
    "main": { 
    "temp": 297.61, 
    "pressure": 1007, 
    "humidity": 36, 
    "temp_min": 296.15, 
    "temp_max": 299.15 
    }, 
    "visibility": 16093, 
    "wind": { 
    "speed": 4.6, 
    "deg": 200, 
    "gust": 7.2 
    }, 
    "clouds": { 
    "all": 5 
    }, 
    "dt": 1490813400, 
    "sys": { 
    "type": 1, 
    "id": 2625, 
    "message": 0.3809, 
    "country": "US", 
    "sunrise": 1490789980, 
    "sunset": 1490834873 
    }, 
    "id": 4689708, 
    "name": "Everman", 
    "cod": 200 
} 

In der Steuerung

$restful_data=json_decode($res->getBody(), true);//to use in first and second level 
    $restful_icon_array=$restful_data['weather']; //to use in third level 
    $restful_icon = $restful_icon_array[0]; //second level is array 

    return view('dashboard',['posts'=>$posts]) 
     ->with(['restful_data'=>$restful_data])//send array for second level 
     ->with(['icon_weather'=>$restful_icon]);//send array for third level 

Nach Ansicht

<p>{{$restful_data['coord']['lon']}}</p> //access to second level 
<img src="https://openweathermap.org/img/w/{{ $icon_weather['icon'] }}.png"> //access to third level 
Verwandte Themen