Laravel遍历first()查询的模型记录时foreach输出异常如何解决
问题原因
first()方法返回的是Eloquent模型实例,而非纯业务字段数组。直接对模型实例做foreach遍历,会默认遍历模型本身所有公开属性,所以会输出incrementing、exists这类内置属性。而你直接return模型时,Laravel会自动调用模型的toArray()方法,仅返回业务字段集合,所以和直接遍历的结果不一致。
正确遍历方法
- 方法1:转成完整业务数组后遍历(最常用,和return模型的输出完全一致)
调用toArray()方法,会包含数据库字段、类型转换后的字段、模型追加的访问器属性:
$psr = property_search_request::where('unique_search_id', 'fz62a1zh0a3320zg3712')->first(); // 非空判断避免查询为空时报错 if ($psr) { foreach ($psr->toArray() as $key => $value) { print_r($key); } }
- 方法2:仅遍历原始数据库字段
如果你不需要访问器、类型转换后的内容,只想要数据库里存储的原始字段值,可以调用getAttributes()方法:
if ($psr) { foreach ($psr->getAttributes() as $key => $value) { print_r($key); } }
内容的提问来源于stack exchange,提问作者Krayz
相关产品推荐
相关产品推荐

