MAMP環境でマイグレーションができなかった
会社のWindowsPCのXAMPPでLaravel開発をしている時は特につまづく事無くスムーズに事が運んでいました。
しかし、自宅のMacPCで開発となると全くマイグレーションが成功せず、開発ができなくなってしまいました!
Macの場合はXAMPPでなくMAMPを使うため、環境が違うせいで設定の仕方が変わるのです。
やっと解決方法がわかったので、ここに記録します。
1、バージョンの低いLaravel
Laravelのバージョンが低いとマイグレーションで失敗する可能性があります。
デフォルトのマイグレーションファイルはDBに反映されるのに、自作したマイグレーションファイルが反映されないパターンの時は、バージョンが低い事が原因だったりします。
Laravelはデータベース中への「絵文字」保存をサポートするため、
デフォルトでutf8mb4文字セットを使っています。
バージョン5.7.7より古いMySQLや、バージョン10.2.2より古いMariaDBを使用している場合、
マイグレーションにより生成されるデフォルトのインデックス用文字列長を
明示的に設定する必要があります。
AppServiceProvider中で
Schema::defaultStringLengthを呼び出してください。
解決策
1、AppServiceProviderに追記する
app\Providers\AppServiceProvider.phpのuseのところに
use Illuminate\Support\Facades\Schema;
を追記します。さらにboot関数の中に
Schema::defaultStringLength(191);
を追記します。
これでマイグレーションが通るようになります。
2、そもそもバージョンの高いLaravelを入れる
Laravelをインストールする際にバージョンを簡単に指定してしまえば解決します。
古いLaravelだとFORM::が使えなかったりしますしね!
5.7以上をインストールするのであれば
composer create-project --prefer-dist laravel/laravel 名前 "5.7.*"
このようにインストールします。
2、MAMPは少し面倒
MAMPでマイグレーションをする場合には、config/database.phpに追記をしないといけません。
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
// 追記 ↓
'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
],
そして.envファイルの設定は
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=データベース名
DB_USERNAME=root
DB_PASSWORD=root
XAMPPだと127.0.0.1だったりパスワード無しだったりするので、少しややこしいですね。
自分はこれらを修正した事でマイグレーションが通るようになりました。