LoginSignup
6
1

More than 3 years have passed since last update.

Laravelで ErrorException Creating default object from empty value というエラー

Last updated at Posted at 2020-04-26

エラーの原因

色々なケースでこのエラーは起こり得ますが、Laravelでこのエラーが出た時に多いパターンのひとつに「Soft Delete = 論理削除したデータ」を取ってこようとしてnullを取ってきてしまい、エラーになっているというものがあります。

Product.php
// 実際のコード
// Productモデルにはソフトデリートが定義されている
namespace App\Models;

use Illuminate\Database\Eloquent\SoftDeletes;

class Product extends Model
{
use SoftDeletes;
}

// 加えてproductsテーブルにはdeleted_atのカラムに値が入っている
ProductController.php
// id=1 のプロダクトが論理削除されている場合
// コントローラなどで該当のデータを取って来ようとすると...
$product = Product::find(1);
$product->name;

// 実行結果
ErrorException
Creating default object from empty value

つまり $product->name や大元の $product がnullになっているのに、それらに対して何かしらの操作をしようとして上記のエラーになる場合があります。

ということでDBからデータを引っ張ってくる時は、
- 該当のテーブルは論理削除を設定していないか?
- 該当のデータが論理削除されていないか?
を確認してみて下さい。

論理削除

テーブルにdeleted_atというカラムを持たせ、ここに日時が入ってるレコードは削除されたものとみなす。違う名前で削除フラグのようなカラムを持たせる場合もあるが、Laravelのデフォルトではdeleted_atのカラムがその役割を担う。
このようなカラムがなく、データベースから完全にデータを削除する場合は物理削除と表現する。
(ご存知とは思いますが念の為。)

対策

このようなエラーを回避するには「論理削除のデータも含めて取得する」という操作が必要なので下記のように記載すれば大丈夫です。

$product = Product::withTrashed()->find(1);

データにアクセスする際 withTrashed() を一緒に書けば、論理削除されたデータも検索して引っ張ってきてくれ、ErrorException : Creating default object from empty value というエラーにはなりません。

参考URL

【Laravel5.8】Creating default object from empty valueを解決したい
stdClassをnewしたらPHP Warning: Creating default object from empty value inとなったときの対応方法
PHP Warning: Creating default object from empty valueの原因と対応
【php】 Creating default object from empty value

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1