Laravelのマイグレーションでは一部で doctrine/dbal
を使う。
https://readouble.com/laravel/5.5/ja/migrations.html#column-modifiers
composer.json でこんな指定してるとする。
"doctrine/dbal": "^2.5",
PHP7.0の環境でcomposer install/updateするとバージョンが合わずにエラー。
Laravel5.5がPHP7.0なのに doctrine/dbal
のために7.1が必要になる。
こう指定するとdbalは2.5だけどdoctrineの他のパッケージで7.1を要求される。
"doctrine/dbal": "2.5.*",
一つ一つ7.0で動くバージョンを指定なんてことは当然やりたくない。
7.1にするのが簡単な方法だけど一つだけまだ7.0なサーバーがあるのでなんとかする。
解決方法
composer.json でPHPバージョンを指定する。
変更前。Laravelのデフォルト。
"config": {
"preferred-install": "dist",
"sort-packages": true,
"optimize-autoloader": true
}
変更後
"config": {
"preferred-install": "dist",
"sort-packages": true,
"optimize-autoloader": true,
"platform": {
"php": "7.0.25"
}
}
7.0は7.0.0と同じで一部パッケージでもう少し上のバージョンを要求されるのでサーバーに合わせてパッチバージョンまで書く。
この方法なら
"doctrine/dbal": "^2.5",
のままでも2.6がインストールされず他のパッケージもPHPバージョンの条件を満たしたものがインストールされる。
いずれPHP7.1にしたら元に戻す。
0.1のバージョンアップで必要なPHPバージョン変えるのはやめて欲しいけど
対策できるので BREAKING CHANGE ではないと思ってるらしい…。
http://www.doctrine-project.org/2017/07/25/php-7.1-requirement-and-composer.html
自分が作ってるものなら躊躇なくメジャーバージョン上げる。