Quantcast
Channel: PHP7.4タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 113

【Laravel5.8】PHP7.4でTrying to access array offset on valueが山盛り出るようになった

$
0
0

Laravel5.8で試したからLaravel5.8としているだけで、他のバージョンや、あるいは他のフレームワークでも発生すると思います。

PHP7.4.0がリリースされました

で、PHP7.4からスカラー型変数に配列アクセスするとE_NOTICEが出るようになりました。

$a=null;echo$a[1];

これはPHP7.3までは何も言いませんでしたが、7.4ではE_NOTICEが発生します。
さらにPHP8ではE_WARNINGになる予定です。

これの何が問題って、値が入ってるかどうかわからないテーブルにリレーション張ってる場合ですよ。

テーブルAのモデル
classTableAextendsModel{/**
     * テーブルBへのリレーション
     */publicfunctionTableB(){return$this->belongsTo(\path\to\TableB::class,'b_id','id');}}

コントローラはwithで引っ張ってきてbladeに投げるだけ。

コントローラ
$tableAs=TableA::with(['TableB'])->get();returnview('hoge.blade.php',[$tableAs]);

ビューではなんか適当に表示。

hoge.blade.php
@foreach($tableAsas$tableA)ID:{{$tableA->id}}Bの値:{{$tableA->TableB['name']}}@endforeach

テンプレートはだいたいこんな書き方をしてると思うのですが、というか私がしてるのですが、テーブルBに値が無かった場合、これまで"Bの値"は単に空白になっていました。
PHP7.4に上げた瞬間、至る所でLaravelがErrorExceptionを吐くようになってえらいことになりましたよ。

根本的に正しく解決するにはどうすればいいのかはよくわかりませんが、とりあえず

Bの値:{{$tableA->TableB['name']??''}}

ってすることで事なきを得た。

事なきを得たと思ったんですが、実はこれLaravel本体側でも発生するんですよね。
確認したところではemailバリデータを使うと出てきます。
そのうち修正されるとは思いますが、先にLaravelのアップデートを終わらせるまでPHP本体のアプデは待った方がよいでしょう。


Viewing all articles
Browse latest Browse all 113

Trending Articles