Laravel 问题:为什么我的 foreach 循环在遍历 DB 记录数组时返回意外输出

Laravel issue: why is my foreach loop returning unexpected output when iterating throgh DB record array

我有一个简单的数据库记录响应存储在一个变量中:

$psr = property_search_request::where('unique_search_id', 'fz62a1zh0a3320zg3712')->first();

在它下面我 运行 一个 foreach 循环,像这样:

foreach ($psr as $key => $value) {
        print_r($key);
}

...如果我 return $psr,我会看到正确的输出(记录数据的数组。)

{
  "id": 27,
  "created_at": "2021-10-27T16:49:19.000000Z",
  "updated_at": "2021-10-27T16:49:19.000000Z",
  "unique_search_id": "fz62a1zh0a3320zg3712-65g-6a13",
...

但是,当我 运行 foreach 循环时,我得到以下输出:

incrementing => 1, exists => 1, wasRecentlyCreated => , timestamps => 1,

如何循环遍历 Laravel/PHP 中的模型响应?

您看到的输出(正确输出)是 JSON 格式的序列化模型。这是将模型作为数组获取,然后将其转换为 JSON。因此,您可以使用 toArray 将模型的属性(和关系)作为数组获取并对其进行迭代。

foreach ($model->toArray() as $attribute => $value) {
    ...
}

您看到的不正确输出是迭代对象的默认行为;它将遍历 public 属性。

Laravel 8.x Docs - Eloquent - Serialization - Serializing To Arrays toArray