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
我有一个简单的数据库记录响应存储在一个变量中:
$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