laravel - 7级在刀片中使用一对多显示关系数据
问题描述
出了什么问题,为什么刀片中不想显示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}]
解决方案
您的第一个 Blade 模板几乎是正确的。
问题是您的一条或多条记录没有Level
分配 ( level_id=null
),但您仍在尝试从 中提取 name 属性$stream->level
,即null
.
只需在尝试访问/打印其属性之前添加对 $stream->level 的检查。例如:
@if($stream->level)
{{ $stream->level->name }}
@endif
或者
{{ $stream->level ? $stream->level->name : 'No Level Attached' }}
或者
{{ optional($stream->level)->name }}
等等
推荐阅读
- javascript - 可以让 split() 从索引 1 开始吗?
- python - 将两个具有相同列名但索引不同的数据框相乘
- python-3.x - Python3 Tkinter 和 Pillow:如何在画布上旋转图像
- python - 使用装饰器添加可检查类型注释
- azure-devops - BIDS 2008 与 Azure DevOps
- java - java.lang.NullPointerException:尝试调用虚拟方法'android.content.pm.PackageManager
- excel - 将表中的所有字段导出到 Excel 并抑制空白列
- database - Firebase 消息未按顺序保存 Flutter 草稿
- python - 如何将 H5 表查询结果转换为 Astropy 表?
- java - 使用 Jackson ObjectMapper 反序列化 JSON 对象双向一对多