我意识到自己无法弄明白的事情。
当我在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
我得到两个结果,“约翰”和“丹”。这完全有意义,因为我的数据库中有两个条目。
那么我怎么会得到两个不同的结果呢?
答案 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
}