首页 > 解决方案 > 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}]

标签: laravellaravel-blade

解决方案


您的第一个 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 }}

等等


推荐阅读