在控制器中,我将一些数据存储在一个数组中。然后我想将它发送到myelectionlist.blade.php
$my_election=[];
$i=0;
foreach ($election_list as $election_list)
{
$my_election[$i]=DB::table('election')
->where('id','=',$election_list->election_id)
->get();
$i++;
}
return view::make('myelectionlist')->with('election_list',$my_election);
我检查
return $my_election
工作正常。但是当我写
时,在myelectionlist.blade.php中@for($i=0;$i<sizeof($election_list);$i++)
{{$election_list[$i]->election_name}}
@endfor
它不起作用。
Undefined property: Illuminate\Support\Collection::$election_name
发生了,如何解决问题?
答案 0 :(得分:1)
我会修复一系列问题,以便为您的代码带来清晰度并向您解释问题。首先,在您的代码中:
foreach ($election_list as $election_list)
我将重命名变量供您查看:
foreach ($foo as $foo)
所以这就是在foreach循环中你将逐个获得所有值,就像预期的那样,但每次将它存储到初始变量中。一旦你完成了foreach或早些时候突破它,$election_list
将具有最后使用的值。如果您以后再次尝试使用相同的$ election_list,则可能会产生意外结果。所以我建议使用不同的变量名称,如$election_list as $election
接下来,有点不清楚为什么要自己跟踪新元素的$索引。相反,你可以像这样推入数组:
$my_election[] = $newObj
实际错误消息:
现在找到实际的错误消息:->get()
返回一个Collection。所以最后你有一个完整的集合数组。所以当你执行$election_list[$i]
时,在for循环中 - 这实际上是一个Collection对象而不是Model,因此是异常。
->get()
将始终为您提供收藏。例如,使用->first()
和find / findOrFail等方法,您将获得单个模型。这些函数也可能更适合使用,因为无论如何我们都要请求和id。
此外,如果这个问题不是您的代码的简化版本,那么我认为您应该在控制器中实际执行此操作:
$my_election = DB::table('election')
->whereIn('id', $election_list->pluck('election_id')) // pluck will give all the id's
->get();
通过这种方式,您可以将一组模型分配给$my_election
。