如果雄辩的对象属性不存在,如何使laravel出错?

时间:2019-01-11 20:49:07

标签: php laravel

我有一个雄辩的模型$user,其中包含以下属性:

  • id
  • 名称

如果我尝试访问不存在的雄辩属性,我将得到null。

$user->address // is null

在php中,如果您尝试访问不存在的对象属性,则会收到错误消息。

$x = (object)[];
$x->test // PHP Notice:  Undefined property: stdClass::$test in Psy Shell code on line 1.

我不确定为什么雄辩的行为会有所不同,而这导致了我的麻烦。

如何使口才与php相同?

2 个答案:

答案 0 :(得分:1)

出于各种原因(包括处理关系和访问器方法),Laravel使用"magic method" called __getsource code)处理未定义的属性。

此行为无法关闭,因为它破坏了许多其他功能。

答案 1 :(得分:1)

正如ceejayoz所说,这是Eloquent的功能,不能将其关闭。但是,一种解决方案是使用DB门面从数据库获取不是雄辩模型的记录。请看以下示例:

$userFromModel = User::first();
dd($userFromModel->notAnAttribute); // null

$userFromDBFacade = DB::table("user")->first();
dd($userFromDBFacade->notAnAttribute); // PHP Notice:  Undefined property: stdClass::$notAnAttribute ...

此后备方法仅适用于简单的检查,可能更值得为模型编写一种验证方法来检查null属性。