为什么刀片中不想显示 LEVEL名称
控制器:
$streams=Stream::with('level')->get();
return view('streams.index',compact('streams'));
流模型:
public function level()
{
return $this->belongsTo('App\Models\Level', 'level_id');
}
级别模型:
public function stream()
{
return $this->hasMany('App\Models\Stream', 'level_id');
}
刀片索引:
@foreach($streams as $stream)
<tr>
<th scope="row">#</th>
<td>{{$stream->name}}</td>
<td>{{$stream->code}}</td>
<td>
{{$stream->level->name}}
</td>
<td>
<tr/>
@endforeach
也尝试过:
@foreach($streams as $stream)
<tr>
<th scope="row">#</th>
<td>{{$stream->name}}</td>
<td>{{$stream->code}}</td>
@foreach($stream as $level)
<td>
{{$level->name}}
</td>
@endforeach
<td>
<tr/>
@endforeach
错误: 试图获取非对象的属性“名称”(视图:C:\ xampp \ htdocs \ project \ sms \ resources \ views \ streams \ index.blade.php)
DD结果:
[{"id":3,"name":"Class A","code":"GRC0001A","uuid":"X9HG9zc7ceTlhdfF1fN1wAer1cHP1MhfuM7GHBSqNogYSo3bsGmpTl06iJQyyKp3QMrkHe1VyiTxeKFa49wC7W5BY3E3kFZkpF1D","level_id":1,"created_at":"2020-06-14T10:58:28.000000Z","updated_at":"2020-06-14T11:39:54.000000Z","level":{"id":1,"name":"YEAR 7","code":"CODE1","uuid":"X9HG9zc7ceTlhdfF1fN1wAer1cHP1MhfuM7GHBSqNogYSo3bsGmpTl06iJQyyKp3QMrkHe1VyiTxeKFa49wC7W5BY3E3kFZkpF1D","created_at":"-000001-11-30T00:00:00.000000Z","updated_at":"-000001-11-30T00:00:00.000000Z"}},{"id":4,"name":"Class B","code":"GRC0001A","uuid":"gq2kZZikN76XEa4pQWsyAZBMxjKeHBJt0a840ZMSiuHGztuhYT0G6q5WcGgp8z6BD6nx0WSrrOTvEb4iQ0ewyB9Fa1M54CAv8HS2","level_id":null,"created_at":"2020-06-14T10:58:36.000000Z","updated_at":"2020-06-14T11:39:59.000000Z","level":null}]
答案 0 :(得分:1)
您的第一个Blade模板几乎是正确的。
问题是您的一个或多个记录没有分配Level
(level_id=null
),但是您仍在尝试从$stream->level
中提取name属性,即{ {1}}。
只需添加一个$ stream-> level的检查,然后再尝试访问/打印其属性。例如:
null
或
@if($stream->level)
{{ $stream->level->name }}
@endif
或
{{ $stream->level ? $stream->level->name : 'No Level Attached' }}
等