ホーム > Laravel > Laravelのエラー'local.ERROR Creating default object from empty value'を解決する方法
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)

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

エラーを解決する方法

エラーの原因

未定義の変数に対して、プロパティを追加しようとしていることが原因です。

エラーを修正する

間違っている例

$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' というエラーが発生した場合、変数が適切に初期化されていないことが主な原因です。

簡単なミスではありますが、自分は何故かよく見るエラー文です。何故だろう。

誰かの参考になれば幸いです。

フィードバックのお願い
この記事のフィードバックがありましたらYoutubeの適当な動画にコメントしていただいたり、お問い合わせからご連絡ください。