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)
こんな感じのエラーがでます。
エラーを解決する方法
エラーの原因
未定義の変数に対して、プロパティを追加しようとしている ことが原因です。
エラーを修正する
間違っている例
$post = new Post;
$posts->title = $request->title;
$posts->save();
これだと$posts
は未定義なのでエラーになります。
正しい例
$post = new Post;
$post->title = $request->title;
$post->save();
$post
は事前に定義しているので、今回の冒頭のエラーは発生しません。
うまくデータが保存されたことを確認できたら成功です。
本件は以上です。
この後、よくあるエラー文
SQLSTATE[HY000]: General error: 1364 Field 'title' doesn't have a default value (Connection: mysql, SQL: insert into
posts
(updated_at
,created_at
) values (2024-11-04 23:03:53, 2024-11-04 23:03:53))
title カラムは必須なのに、データが空な時にこのエラーが発生します。
この title カラムを必須にする設定はマイグレーション時に行われています。
$request->title が正しく受け取れているか確認する
とりあえず出力してみて、正しく受け取れているか確認しましょう。
dd($request->title);
$post = new Post;
$post->title = $request->title;
$post->save();
もし受け取れていない場合、view 側の<form></form>
の間を確認する必要があります。
よくあるのが<input>
のname
が間違っているパターンです。
以下のような、タイピングミスとか疑ってみてください
<input name="tltle" />
title を必須じゃなくするとき
マイグレーションファイルの title カラムを必須じゃないようにする方法は、
$table->string('title')->nullable();
title に空が入った時のデフォルトを設定して対応するとき
$table->string('title')->default('デフォルトのタイトル');
おわりに
Laravel で 'Creating default object from empty value' というエラーが発生した場合、変数が適切に初期化されていないことが主な原因です。
簡単なミスではありますが、自分は何故かよく見るエラー文です。何故だろう。
誰かの参考になれば幸いです。