Laravel

Laravelのエラー「local.ERROR Creating default object from empty value」を解決する方法

いつもご利用ありがとうございます。このブログは、広告費によって運営されています。

オススメ本
Web技術を勉強するなら、かなりオススメの雑誌です。毎月新しい発見があります。ついに最終号・・・、みなさん買いましょう!!
読んで損することはない名著。命名で悩むことが多い人はこの本がオススメです。

⇨ Laravel 記事の目次はこちら

Laravel のエラーで、「local.ERROR Creating default object from empty value」を解決する方法を記事にしました。

どんなエラーがでるか

local.ERROR: Creating default object from empty value {“exception”:“[object] (ErrorException(code: 0): Creating default object from empty value at /app/Http/Controllers/PostController.php:30)

こんな感じのエラーがでます。

なぜエラーになるのか?

このエラーになる根本的な原因は、

データベースのカラムが必須なのに、何もデータが入っていない

ことが原因となっています。

つまり、

  1. データベースの設計で、そもそも必須にしないようにする
  2. データベースの設計で、default(何も入力がない時の初期値)を設定する
  3. もしかしたら、予期したデータが入ってきていないかもしれない

この 3 つの中から、すべき対処をしたら良いかと思います。

① データベースの設計でそもそも必須にしない様にする方法

マイグレーションファイルに nullable()を追加することによって、null を許容することが可能です。

マイグレーションファイルを修正します

  Schema::create('items', function (Blueprint $table) {
      $table->id();
      $table->string('title')->nullable(); //nullable()を追加する
      $table->timestamps();
  });

このように、カラムごとに設定することが可能です。

② データベースの設計で、default(何も入力がない時の初期値)を設定する方法

マイグレーションファイルに、何もデータが入らないと、default で設定した値を入れることができます。

マイグレーションファイルを修正します

Schema::create('items', function (Blueprint $table) {
    $table->id();
    $table->string('title')->default('タイトルなし'); //default()を追加する
    $table->timestamps();
});

このように、カラムごとにデータが入らなかったとき「タイトルなし」とカラムに入力される様になります。

③ もしかしたら、予期したデータが入ってきていないかもしれない

例えばコントローラーで

$item = new Item;
$item->title = $request->title;
$item->save();

このような記述をしていたとします。

このようなとき、冒頭のエラー文が発生した場合、実は

$request->title

これがデータを持っていない可能性があります。

これは、

dd($request->title);

で中身を確認することで対応することが可能です。

もし、ここが null だったら、$request->title にデータが入ってくるように考えてみてください。

まとめ

以上です。

Laravel で

local.ERROR: Creating default object from empty value {“exception”:“[object] (ErrorException(code: 0): Creating default object from empty value at /app/Http/Controllers/PostController.php:30)

と出た時のエラーについて記事にしてみました。

誰かの参考になればと思います。

感想・苦情は TwitterDM にご連絡ください。

それでは!

人気記事

PHP7.4 + Laravel6 のプロジェクトを AWS EC2 にデプロイする

【laravel-breadcrumbs】Laravel でパンくずリストを実装する