#はじめに
元々Railsメインで開発をしていましたが、最近業務でLaravelを触る機会が増え為、その中で学んだことや気づいたことの備忘録となります!
やりたかったこと:
ユーザーオブジェクトのカラムは全てnull:falseに指定するが、もしユーザーがニックネームのフォームを入力せずにフォーム送信した場合はデフォルトで空文字を挿入させたい
/database/migrations
$table->string('nick_name')->nullable(false)->default('');
そのためのマイグレーションをこうやって書いて、このカラムを指定したフィールドは未入力の状態でからデータを送信!すると、、
エラー:SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'nick_name' cannot be null (SQL: insert into***
nullはゆるしませんエラー、、、デフォルトで空文字指定したじゃん!なんでnull?
原因:Laravel 5.4 で導入されたConvertEmptyStringsToNullミドルウェアの動作
このLaravelのミドルウェア[TrimStrings]と[ConvertEmptyStringsToNull]により、空の文字列フィールドは自動でnullに変換されるのでエラーになる
対策:$middlewareプロパティから該当のミドルウェアをコメントアウトする
/app/Http/Kernel.php
protected $middleware = [
\App\Http\Middleware\TrustHosts::class,
\App\Http\Middleware\TrustProxies::class,
\Fruitcake\Cors\HandleCors::class,
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
//\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];
以上です!