未定义的属性:Illuminate \ Support \ Collection :: $ election_name in view

时间:2017-07-21 03:27:36

标签: laravel-5

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

发生了,如何解决问题?

1 个答案:

答案 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