Laravel 8使用first()方法获取模型实例无法访问数据属性问题
问题原因
first()返回的是正常的Eloquent模型实例,直接用print_r()打印时,会把对象所有属性(包括标记为protected的框架内部配置、受保护的原始数据存储区等)全部输出,才会出现大量冗余的内部结构信息。这不是查询出错,数据本身是正常可访问的。
正确操作方式
访问数据属性
Eloquent模型做了属性代理,不需要手动去读取内部受保护的attributes数组,直接以对象属性的方式读取对应字段即可:
$all_value_bulk = BulkEmail::where('status','processing')->whereNull('processing_status')->first(); // 直接读取对应字段值 echo $all_value_bulk->id; echo $all_value_bulk->file_path; echo $all_value_bulk->file_name;
注意:原代码中where('processing_status',null)的写法在部分数据库/驱动配置下会生成不符合预期的SQL,判空查询推荐使用框架内置的whereNull()方法,避免查询结果出错。
调试打印纯数据
如果只是调试查看查询结果,不需要看模型内部结构,用以下方式打印即可:
- 转数组后打印,只会输出字段对应的键值对:
print_r($all_value_bulk->toArray());
- 使用框架内置的
dd()辅助函数,会自动格式化输出模型数据,可读性更高:
dd($all_value_bulk);
- 如果不需要模型实例,只想拿到纯数组结果,可以在查询后直接转数组:
$all_value_bulk = BulkEmail::where('status','processing') ->whereNull('processing_status') ->first() ->toArray(); print_r($all_value_bulk);
补充说明
你打印结果里[attributes:protected]下的数组就是实际从数据库查询到的字段内容,只是这个属性是受保护的类内部属性,无法直接从外部通过$all_value_bulk->attributes的方式读取,必须通过Eloquent提供的属性访问机制读取。
内容的提问来源于stack exchange,提问作者xFactor11
相关产品推荐
相关产品推荐

