2016-09-30 6 views
1

Ich habe ein JSON Ergebnis aus einer Abfrage, die wie folgt aussieht:Prevent verzögertes Laden in Sicht

{ 
    "id":1, 
    "user_id":"1", 
    "message":"Hello, world", 
    "created_at":"2016-09-22 00:32:20", 
    "updated_at":"2016-09-22 00:32:20", 
    "stats": [ 
     ... 
    ] 
}, 
{ 
    "id":2, 
    "user_id":"1", 
    "message":"Hello, world", 
    "created_at":"2016-09-22 00:32:20", 
    "updated_at":"2016-09-22 00:32:20", 
}, 
{ 
    ... more results 
} 

Beachten Sie, dass manchmal das Ergebnis hat eine stats Eigenschaft und manchmal nicht (trotz jeden Datensatz eine stats Beziehung mit). Frag nicht warum, so habe ich es im Backend eingerichtet.

Ich möchte durch diese Ergebnisse meiner Meinung nach in einer Schleife, wie folgt aus:

@foreach ($posts as $post) 
    @if (isset($post->stats) && !empty($post->stats) 
     {{ $post->stats->total }} 
    @endif 
@endforeach 

jedoch für die Zeit nach id 2, die Schleife wird auch die Ausgabe der $post->stats->total Wert, weil sie faul Lasten der stats.

Wie kann ich verhindern, dass es die stats Beziehung lazy lädt?

Antwort

3

Das passiert, weil Sie auf $post->stats zugreifen. Sie können stattdessen prüfen, ob die stats Beziehung geladen ist oder nicht durch die relationLoaded() Methode in Illuminate\Database\Eloquent\Model definiert mit:

@foreach ($posts as $post) 
    @if ($post->relationLoaded('stats')) 
     {{ $post->stats->total }} 
    @endif 
@endforeach 
Verwandte Themen