Laravel Foreach Controller vs View

时间:2016-11-02 14:09:43

标签: php laravel foreach

我意识到自己无法弄明白的事情。

当我在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);
}

在我的视图中使用{{$ var}}我只得到了“John”。

但是当我在视图中而不是在Controller中使用foreach循环时:

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

我得到两个结果,“约翰”和“丹”。这完全有意义,因为我的数据库中有两个条目。

那么我怎么会得到两个不同的结果呢?

3 个答案:

答案 0 :(得分:5)

当你这样做时:

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

每次迭代都会覆盖$var,因此您始终可以获得最后一个值。例如,如果您有['Dan', 'John, 'Alice', 'Alan'],那么您将获得Alan

良好做法是将数据传递给视图并使用@foreach进行迭代。

答案 1 :(得分:0)

因为只有最后一个循环迭代存储在$var

你需要

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

答案 2 :(得分:0)

你在循环中重写$ var。

试试这个:

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