Laravel5.8で試したからLaravel5.8としているだけで、他のバージョンや、あるいは他のフレームワークでも発生すると思います。
で、PHP7.4からスカラー型変数に配列アクセスするとE_NOTICEが出るようになりました。
$a = null;
echo $a[1];
これはPHP7.3までは何も言いませんでしたが、7.4ではE_NOTICEが発生します。
さらにPHP8ではE_WARNINGになる予定です。
これの何が問題って、値が入ってるかどうかわからないテーブルにリレーション張ってる場合ですよ。
class TableA extends Model{
/**
* テーブルBへのリレーション
*/
public function TableB()
{
return $this->belongsTo(\path\to\TableB::class, 'b_id', 'id');
}
}
コントローラはwithで引っ張ってきてbladeに投げるだけ。
$tableAs = TableA::with(['TableB'])->get();
return view('hoge.blade.php', [$tableAs]);
ビューではなんか適当に表示。
@foreach ($tableAs as $tableA)
ID: {{ $tableA->id }}
Bの値: {{ $tableA->TableB['name'] }}
@endforeach
テンプレートはだいたいこんな書き方をしてると思うのですが、というか私がしてるのですが、テーブルBに値が無かった場合、これまで"Bの値"は単に空白になっていました。
PHP7.4に上げた瞬間、至る所でLaravelがErrorExceptionを吐くようになってえらいことになりましたよ。
根本的に正しく解決するにはどうすればいいのかはよくわかりませんが、とりあえず
Bの値: {{ $tableA->TableB['name'] ?? '' }}
ってすることで事なきを得た。
事なきを得たと思ったんですが、実はこれLaravel本体側でも発生するんですよね。
確認したところではemailバリデータを使うと出てきます。
そのうち修正されるとは思いますが、先にLaravelのアップデートを終わらせるまでPHP本体のアプデは待った方がよいでしょう。