2016-11-02 29 views
1

私は自分では理解できないことを実現しました。Laravel Foreach Controller vs表示

コントローラで最初にループして結果を私のビューに渡すと、結果が変わります。ループはまっすぐ私の見解では。

例えば

: 私は私のコントローラでこれを持っている:

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

私は結果としてのみ "ジョン" を取得私の見解では、{{$のVARを}}使用することによって。

しかし、私は私の見解ではなく、コントローラにforeachループを使用する場合:

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

私は2つの結果を取得するには、「ジョン」と「ダン」。私のDBに2つのエントリがあるので、これは完全に意味をなさない。

ここで2つの異なる結果が得られたらどうなりますか?あなたは、このやっているとき

答えて

5

:各繰り返しで

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

をあなたは$varを上書きするので、あなたは常に最後の値を取得します。たとえば、['Dan', 'John, 'Alice', 'Alan']の場合はAlanとなります。

データをビューに渡して、それを@foreachで繰り返すことをお勧めします。

0

最後のループ反復のみが$varに格納されているためです。

あなたがループ内での$ VARをオーバーライドしている

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

する必要があります。

これを試してみてください:

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