刀片使用一对多的级别7显示关系数据

时间:2020-06-16 15:49:09

标签: laravel laravel-blade

为什么刀片中不想显示 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}]

1 个答案:

答案 0 :(得分:1)

您的第一个Blade模板几乎是正确的。

问题是您的一个或多个记录没有分配Levellevel_id=null),但是您仍在尝试从$stream->level中提取name属性,即{ {1}}。

只需添加一个$ stream-> level的检查,然后再尝试访问/打印其属性。例如:

null

@if($stream->level)
   {{ $stream->level->name }} 
@endif

{{ $stream->level ? $stream->level->name : 'No Level Attached' }}

相关问题