Laravel PHP

Laravel 5.5LTSから6.x LTSへのアップグレード

公式と日本語訳のドキュメントはこちら
https://laravel.com/docs/6.x/upgrade
https://readouble.com/laravel/6.0/ja/upgrade.html
Laravelは前のLTSが新しいLTSの一つ前のバージョンよりサポート期限が長いのに順番に対応していくしか対応方法を記載してくれていない。。。
要するにドキュメントに沿うと一度サポート期限を過ぎているバージョンを経由して最新版に上げる形になるけれど、今回は一気にあげちゃったので下記の通りです。
まずはphpのバージョンを確認しましょう。
Laravel6.0はphp7.2以上が必要です。
ちなみにLaravel6からはセマンティックバージョニングになっています。
なんぞそれ?というところですが、ざっというとバージョンの付け方が変わって6.0->6.1は互換性が保持されて5.5->5.6みたいに重くないよというだけですね。
実際公式の通り"^6.0"指定でいれたところ現在6.3.0が入りましたが、6.0.3みたいな感覚です。
ではアップデートを開始します。
composer.json を編集してバージョン情報を下記のようにします。
"laravel/framework": "^6.0",
"phpunit/phpunit": "<=7.5"
ちなみにJWTが入っている場合は下記になります。(参考
"tymon/jwt-auth": "1.0.x-dev",
composer.json を編集し終えたら
$ composer update

これでCall to undefined function str_slug()  とかでてコケるなら
$ composer require laravel/helpers
composer update

最後に
Package manifest generated successfully.
と出ればOK。

プログラムの修正としては
https://readouble.com/laravel/6.0/ja/upgrade.html
主キータイプの宣言
要するに、primary keyはintegerって決めつけたからuuidとか文字列使っている場合は
protected $keyType = 'string';
を追加してねということ。
これをしていないとuuidがintでキャストされて0とか12とかになってSQLが通りませんでした。
config/logging.php
デフォルトの設定ファイル(https://github.com/laravel/laravel/blob/master/config/logging.php
を config/logging.php に設置し、必要に応じて設定を変更します。
config/app.php でログの設定をしているところを移してconfig/app.php からは削除します。
設定はキャッシュされているので変更したら
$ php artisan config:cache
でキャッシュ更新して反映しましょう。
テンプレート部分としては5.7での変更点により
{{ $foo or 'default' }}
がすべて条件式評価されて1と表示されるようになっているので
{{ $foo ?? 'default' }}
に書き換えます。
以上を変更したら無事問題なく動作するようになりアップグレードが完了しました。
環境により他も色々つまると思うのでその場合は下記の公式(日本語訳)の各バージョンの変更点を追いかけると解消するはずです。
参考:
Laravelバージョンアップマニュアル(日本語訳)
5.5->5.6: https://readouble.com/laravel/5.6/ja/upgrade.html
5.6->5.7: https://readouble.com/laravel/5.7/ja/upgrade.html
5.7->5.8: https://readouble.com/laravel/5.8/ja/upgrade.html
5.8->6.x: https://readouble.com/laravel/6.0/ja/upgrade.html
phpunit
https://github.com/laravel/framework/issues/28827

-Laravel, PHP