Laravel nullと空文字列の違いと変換方法・取り出し方

Laravel 入門講座
スポンサーリンク

Laravelでは、デフォルトで空文字をnullに変換してしまいます。

「nullと空文字はどう違うの?」

という方向けに、ふたつの違い、null変換を止める方法、nullを条件にデータベースから値を抽出する方法を紹介します。

じゅんこ
じゅんこ

Laravelのnullをスッキリ理解して、上手にnullと空文字を使い分けていきましょう♪

スポンサーリンク

null(ヌル)と空文字列の違い

null(ヌル)と空文字列は違います。

null≠空文字列

データベースにはデータ型のようなものをいれます。

空文字の時はデータ型が定まっていて、中身が空っぽな状態。

nullはデータ型も何もない状態です。

データベース上でも違いが分かります。

nullと空文字が入ったデータベース例

data4~data7はNull, data8~data10には空文字が入っています。

もしかしたら

「なんだかややこしいなぁ」

「nullなんていらないんじゃない?」

と思う方もいるかもしれませんが(←わたしは最初思いました^^;)、nullは、とっても大事。

データのタイプを定めるデータ型は、日付用や数字用、短めのテキスト用や長めのテキスト用など、ものすごくいっぱいあります。

「空っぽの値」を定義するときには、データ型のことも気にしなくてはいけません。

「データ型とか気にせず処理したい」という時に、nullは非常に便利なんです。

Laravelは空文字をnullにしてしまう

なおLaravelは、デフォルトで「空文字」を許してくれません。

空っぽのカラムがあると、エラーになります。

入力しないかもしれないカラムがある場合、そのカラムをnullable()(=nullでもOK)に設定する必要があります。

下記のように、マイグレーションファイルでカラムにnullable()を付ければOKです。

【’post_image’カラムをnullableに設定した例】

nullableの入ったマイグレーションファイル例

こうすると、入力された空文字は自動でnull値になり、エラーを回避できます。

Laravelのnullを空文字に一括変更する方法

ただ自動でnull値が入ると、困るときもあります。

勝手に空文字をnullに変換しないようにするには、次のようにミドルウェアの設定を変更します。

  1. app/Httpの中のKernel.phpを開く
  2. TrimStringsとConvertEmptyStringsToNullを無効にする

この2つのミドルウェアを無効にすることで、空文字列が勝手にnull値に変換されなくなります。

Laravelの公式マニュアルでも、この方法が書かれています。

この動作(空の文字列をnullに変換する)を無効にしたい場合は、アプリケーションのミドルウェアスタックから2ミドルウェアを削除するため、App\Http\Kernelクラスの$middlewareプロパティから2つのミドルウェアを削除してください。

*引用元:https://readouble.com/laravel/8.x/ja/requests.html

ただミドルウェアを入れるとなると、他の既存部分にも、色々と影響が出てしまうかもしれません。

「この処理を行う時だけ、Nullを空文字に変換したい」という場合には、array_map関数などを使うと便利。

処理例は、別の記事でご紹介しています。

Laravelでnullや空文字を抽出する方法

最後に、nullや空文字に関連するメソッドを紹介します。

「値がnullや空文字かどうかを条件にしたい」ときに便利なメソッドはこちら。

【null・空文字を条件にするメソッド】

メソッド 意味
count if (count($records) > 0) 1個以上あれば
isEmpty if ($records->isEmpty()) null/空文字/falseなら
isset if (isset($records)) 定義されていてnullでないなら
null if($records==null) nullなら

「nullかどうかを抽出条件にしたい」場合には、whereNull whereNotNullがあります。

【nullかどうかを抽出条件にするメソッド】

 メソッド 意味
whereNull $records::whereNull(‘カラム名’) あるカラムがNullの$recordsデータを抽出
whereNotNull $records::whereNotNull(‘カラム名’) あるカラムがNullでない$recordsデータを抽出

whereNullやwhereNotNullは、色々と使えます。

じゅんこ
じゅんこ

nullを理解して、引き続きLaravelライフを便利にしていきましょう♪

Laravel 入門講座

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中!
会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

【個別サポート実施中】

「本ブログに記載の方法を試してみたけれど、うまくいかない」「コードを見てほしい」という方のために、有償でメールサポートいたします。以下のボタンをクリックして相談フォームにアクセスして下さい。

詳しく見る

Twitter始めました。
スポンサーリンク
40代からプログラミング!

コメント

タイトルとURLをコピーしました