2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Laravel】フォーム送信時デフォルト値で設定した空文字がnullになってしまう問題

Last updated at Posted at 2021-03-12

#はじめに
元々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,
    ];

以上です!

参考:https://readouble.com/laravel/5.4/ja/requests.html

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?