2016-11-02 4 views
1

Ich erkannte etwas, was ich selbst nicht herausfinden kann.Laravel Foreach Controller vs Ansicht

Ich bekomme ein anderes Ergebnis, wenn ich zuerst in einem Controller durchlaufen und dann das Ergebnis meiner Ansicht übergeben. Versus Schleife gerade aus meiner Sicht.

Zum Beispiel: Ich habe dies in meinem Controller:

public function index() 
{ 
    $subscribers = Subscriber::where('user_id', Auth::user()->id)->orderBy('created_at','asc')->get(); 

    foreach ($subscribers as $key => $subscriber) { 
     $var = $subscriber->name; 
    } 

    return view('backend.newsletter.contacts.index')->withSubscribers($subscribers) 
                ->withVar($var); 
} 

mithilfe von {{$ var}} in meiner Ansicht, die ich nur "John" als Ergebnis erhalten.

Aber wenn ich die foreach-Schleife in meiner Sicht statt im Controller verwenden:

@foreach($subscribers as $key => $subscriber) 
{{$subscriber->name}} 
@endforeach 

ich zwei Ergebnisse zu erhalten, "John" und "Dan". Das macht absolut Sinn, da ich zwei Einträge in meiner DB habe.

Also wie kommt es, dass ich hier zwei verschiedene Ergebnisse bekomme? diese

Antwort

5

Wenn Sie tun:

foreach ($subscribers as $key => $subscriber) { 
    $var = $subscriber->name; 
} 

Mit jeder Iteration überschreiben Sie $var so immer Sie den letzten Wert. Wenn Sie beispielsweise ['Dan', 'John, 'Alice', 'Alan'] haben, erhalten Sie Alan.

Gute Praxis ist auch Daten an eine Ansicht übergeben und es mit @foreach iterieren.

0

Da nur die letzte Schleifeniteration in $var gespeichert ist.

Sie müssen

$var = []; 
foreach ($subscribers as $key => $subscriber) { 
    $var[] = $subscriber->name; 
} 
0

Sie sind in der Schleife $ var überschrieben.

Versuchen Sie folgendes:

$var = []; foreach ($subscribers as $key => $subscriber) { $var[] = $subscriber->name; // Appends name to array }