Laravel
Laravelのエラー「local.ERROR Creating default object from empty value」を解決する方法
いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。
目次
オススメ本
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)
こんな感じのエラーがでます。
なぜエラーになるのか?
このエラーになる根本的な原因は、
データベースのカラムが必須なのに、何もデータが入っていない
ことが原因となっています。
つまり、
- データベースの設計で、そもそも必須にしないようにする
- データベースの設計で、default(何も入力がない時の初期値)を設定する
- もしかしたら、予期したデータが入ってきていないかもしれない
この 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 にご連絡ください。
それでは!
人気記事