我有一个雄辩的模型$user
,其中包含以下属性:
如果我尝试访问不存在的雄辩属性,我将得到null。
$user->address // is null
在php中,如果您尝试访问不存在的对象属性,则会收到错误消息。
$x = (object)[];
$x->test // PHP Notice: Undefined property: stdClass::$test in Psy Shell code on line 1.
我不确定为什么雄辩的行为会有所不同,而这导致了我的麻烦。
如何使口才与php相同?
答案 0 :(得分:1)
出于各种原因(包括处理关系和访问器方法),Laravel使用"magic method" called __get
(source 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
属性。