Laravel 如何从Session存储的Sample_table模型实例获取original数组值
读取Eloquent实例original数组的实现方案
你在调试输出中看到的带#前缀的original属性,是Eloquent模型定义的protected受保护属性,外部无法通过$实例->original的语法直接读取,直接调用会触发访问权限错误。
Laravel 已在Eloquent模型中内置公开方法,专门用于读取该受保护属性,无需修改模型代码或通过反射绕过权限限制。
具体操作代码
结合你当前从Session取模型的逻辑,直接调用内置方法即可:
// 与你现有调试逻辑保持一致,取出对应的Sample_table模型实例 $sampleModel = Session::get('sample')[0]; // 1. 获取完整的original数组,返回内容与你dd看到的#original数组完全一致 $originalAll = $sampleModel->getOriginal(); // 2. 仅需要取original数组中指定字段值时,可直接传入字段名 $fieldValue = $sampleModel->getOriginal('firstName'); // 3. 支持传入默认值,应对字段不存在的场景 $defaultValue = $sampleModel->getOriginal('不存在的字段', '自定义默认值');
注意事项
getOriginal()返回的是模型从数据库首次加载时的原始属性值,后续对模型属性的修改不会改变该方法的返回结果,与动态读取属性($model->属性名)的逻辑有本质区别- 不推荐使用反射等手段直接读取protected的
original属性,属于破坏模型封装的写法,后续Laravel版本调整内部结构时易出现兼容问题
内容的提问来源于stack exchange,提问作者user3124540
相关产品推荐
相关产品推荐

