PHP
xampp
mamp
Laravel

XAMP/MAMPでのLaravel注意点 文字数やマイグレーション


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だったりパスワード無しだったりするので、少しややこしいですね。

自分はこれらを修正した事でマイグレーションが通るようになりました。