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' というエラーが 発生した場合、変数が適切に初期化されていないことが主な原因です。
簡単なミスではありますが、自分は何故かよく見るエラー文です。何故だろう。
誰かの参考になれば幸いです。





