Laravel使って開発しているときに、自分のローカル環境だけ、Schema::getColumnListingで取得される列の並び順が定義順ではなく物理名順で取得されていた。
本番環境や他の開発者の環境では定義順で取得されている。なんで??
起こっている事象
例として、以下のカラムを持つテーブルがあるとする。
id | name | age | gendor | comment |
---|
Schema::getColumnListingで列情報を取得すると、期待する結果としては以下の通り。
['id', 'name', 'age', 'gendor', 'comment']
上記に対して、自分のローカル環境では、
['age', 'comment', 'gendor', 'id', 'name']
と、物理名順で取得されちゃう。処理的にこれだと困ることに。
原因はDB(MySQL)のバージョン
分かってしまえば単純なことだったけど、原因はMySQLのバージョンだった。
自分のローカル環境(取得結果が物理名順)
- PHP 7.3.20-1+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Jul 9 2020 16:34:09) ( NTS )
- mysql Ver 8.0.21 for Linux on x86_64 (MySQL Community Server – GPL)
- Laravel 5.7.29
本番環境(取得結果が定義順)
- PHP 7.3.16 (cli) (built: Mar 17 2020 10:18:38) ( NTS )
- mysql Ver 14.14 Distrib 5.7.29, for Linux (x86_64)
- Laravel 5.7.29
MySQLの最新バージョンは何かと…と聞いてはいたが、そこまで気にしていなかったけどこういうことか…
ローカル環境のバージョンを5.7に落としたらちゃんと定義順で取得できるようになった。
結論
開発においてバージョンの統一は大事!(当たり前だけどw)