laravel收集对象

时间:2018-03-20 05:45:20

标签: laravel eloquent

如何将集合转换为对象,以便我可以访问关系表数据,因为我收到以下错误。 尝试获取非对象的属性(查看:E:\ xampp \ htdocs \ digi \ resources \ views \ admin \ view-all-location.blade.php)

Controller:   
$locations = Location::all();

return view('admin.view-all-location')->withLocations($locations);

View::
    <tbody>
    @if(! count($locations) > 0)
          <th>No Location Added</th>
   @endif
     @foreach($locations as $location)
        <tr class="odd gradeX">
           <td>{{$location->name}}</td>
            <td>{{ $location->company->name }}</td>
            <td>{{$location->module->name}}</td>
            <td>{{$location->address}}</td>
            <td>{{$location->created_at->format('d.m.Y')}}</td>

         </tr>
    @endforeach
</tbody>

3 个答案:

答案 0 :(得分:2)

你应该试试这个:

<强>控制器

$locations = Location::with(['company','module'])->get();
return view('admin.view-all-location',compact('locations'));

查看

<tbody>
    @if(isset($locations) && count($locations) > 0)
       @foreach($locations as $location)
        <tr class="odd gradeX">
           <td>{{$location->name}}</td>
            <td>{{ $location->company->name }}</td>
            <td>{{$location->module->name}}</td>
            <td>{{$location->address}}</td>
            <td>{{$location->created_at->format('d.m.Y')}}</td>

         </tr>
      @endforeach

   @else
      <th>No Location Added</th>

   @endif

</tbody>

答案 1 :(得分:0)

您的某个地理位置没有关联的companymodule。因此,访问$location->company->name$location->module->name会引发错误,因为您正试图访问->namenull

处理此问题的一些常见方法:

isset与三元运算符结合使用:

<td>{{ isset($location->company) ? $location->company->name : '' }}</td>
<td>{{ isset($location->module) ? $location->module->name : '' }}</td>

您也可以使用刀片or简写:

<td>{{ $location->company->name or '' }}</td>
<td>{{ $location->module->name or '' }}</td>

如果您使用的是PHP7,则可以使用null coalesce运算符:

<td>{{ $location->company->name ?? '' }}</td>
<td>{{ $location->module->name ?? '' }}</td>

答案 2 :(得分:0)

使用get代替all

<强>控制器

$locations = Location::with(['company','module'])->get();
return view('admin.view-all-location',["locations"=>$locations]);

查看

 <tbody>
    @if($locations->isEmpty())
          <th>No Location Added</th>
   @endif
     @foreach($locations as $location)
        <tr class="odd gradeX">
           <td>{{$location->name}}</td>
            <td>{{ $location->company()->name }}</td>
            <td>{{$location->module()->name}}</td>
            <td>{{$location->address}}</td>
            <td>{{$location->created_at->format('d.m.Y')}}</td>

         </tr>
    @endforeach
</tbody>