尝试在 null laravel-8 上读取 属性 "match_name"

Attempt to read property "match_name" on null laravel-8

我有

ErrorException Attempt to read property "match_name" on null (View: C:\xampp\htdocs\Cbangla\resources\views\admin\manage\score\index.blade.php) Error

我想从我的分数中获取所有数据tables 这是我的分数table 数据库视图

要获取分数中的所有数据 table 这就是我的 ScoreController.php

public function index()
{
    $data=Score::all();
    $team=Team::all();
    $match=Matchh::all();
    $player=Player::all();

    return view('admin.manage.score.index',compact('data','team','match','player'));
}

这是我的Score.php模型

protected $fillable = ['score_name','score_slug','team_id','match_id','player_id'];

    public function team(){
        return $this->belongsTo(Team::class);
    }
    public function matchh(){
        return $this->belongsTo(Matchh::class);
    }
    public function playre(){
        return $this->belongsTo(Player::class);
    }

这是我的index.blade.php

@foreach ($data as $key => $row)
   <tr>
       <td>{{ $key + 1 }}</td>
       <td>{{ $row->score_name }}</td>
       <td>{{ $row->score_slug }}</td>
       <td>{{ $row->matchh->match_name }}</td>
       <td>{{ $row->team->team_name }}</td>
       <td>{{ $row->player->player_name }}</td>
       </tr>
@endforeach

请将 match_id 添加到 matchh 关系案例中,您的关系名称与您存储在数据库中的匹配 ID 不同

 public function matchh(){
        return $this->belongsTo(Matchh::class,'match_id');
    }

您必须提供关系中的键,因为您的方法名称是 matchh,在这种情况下关系除了 matchh_id 但在您的情况下它必须是 match_id。 所以:

public function matchh(): BelongsTo
{
    return $this->belongsTo(Matchh::class, 'match_id');
}

据我所知,当分数不匹配或找不到匹配项时出现问题。 首先,您必须指定关系列,因为您的模型名为 Matchh 并且 laravel 正在寻找 matchh_id 列。

解决方案:

# Score.php model
public function matchh(){
    return $this->belongsTo(Matchh::class,'match_id');
}

提示 1:

你可以使用optional函数,当你不确定模型是否有关系时

@foreach ($data as $key => $row)
   <tr>
       <td>{{ $key + 1 }}</td>
       <td>{{ $row->score_name }}</td>
       <td>{{ $row->score_slug }}</td>
       <td>{{ optional($row->matchh)->match_name }}</td>
       <td>{{ optional($row->team)->team_name }}</td>
       <td>{{ optional($row->player)->player_name }}</td>
       </tr>
@endforeach

提示 2:

您可以使用 whereHas 函数来确保 Score 具有 Matchh

public function index()
{
    $data=Score::query()->whereHas('matchh')->get();
    $team=Team::all();
    $match=Matchh::all();
    $player=Player::all();

    return view('admin.manage.score.index',compact('data','team','match','player'));
}