未定义的属性:视图中的 Illuminate\Support\Collection::$election_name



在控制器中,我将一些数据存储在一个数组中。然后我想把它发送到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: IlluminateSupportCollection::$election_name

发生,如何解决问题?

我会修复一系列问题,以便使您的代码清晰并向您解释问题。首先,在您的代码中,您有:

foreach ($election_list as $election_list)

我将重命名变量供您查看:

foreach ($foo as $foo)

因此,这样做是在foreach循环中,您将一一获取所有值,就像预期的那样,但每次将其存储到初始变量时。一旦你完成了foreach或更早地突破它,$election_list将具有最后使用的值。如果您稍后再次尝试使用相同的 $election_list,则可能会产生意外结果。所以我建议使用不同的变量名称,例如$election_list as $election


接下来,有点不清楚为什么要自己跟踪新元素的$index。相反,您可以像这样推入数组:

$my_election[] = $newObj

实际错误消息:

现在对于实际的错误消息:->get()返回一个集合。所以最后你有一个充满集合的数组。因此,当您执行$election_list[$i]时,在 for 循环中 - 这实际上将是一个集合对象而不是模型,因此是异常。

->get()总会给你收藏。例如,使用->first()和find/findOrFail等方法,您将获得单个模型。这些函数也可能更适合使用,因为我们无论如何都在请求 with 和 id。


此外,如果这个问题不是代码的简化版本,那么我认为您应该在控制器中实际做什么:

$my_election = DB::table('election')
->whereIn('id', $election_list->pluck('election_id')) // pluck will give all the id's
->get();

这样,您就有了分配给$my_election的模型集合。

最新更新