Laravel - 将数组转换为雄辩的集合
Posted
技术标签:
【中文标题】Laravel - 将数组转换为雄辩的集合【英文标题】:Laravel - convert array into eloquent collection 【发布时间】:2019-05-31 06:08:48 【问题描述】:我需要使用来自 API 的数据。
我创建一个函数:
public function getItems()
$client = new \GuzzleHttp\Client();
$res = $client->get('https://app.example.com/api/getItems');
$vouchers = json_decode($res->getBody(), true);
dd($vouchers);
return view('api', compact('vouchers'));
和dd($vouchers)
回复我:
现在,当我尝试将 $vouchers 数组与刀片引擎一起使用时:
<body>
@foreach ($vouchers as $v)
<p>$v->name</p>
@endforeach
</body>
我收到错误:
"Trying to get property 'name' of non-object (View: .... etc...
如何将数组转换为雄辩的集合。 我用的是最新的 Laravel 5.7 版本
【问题讨论】:
你能dd($vouchers['vouchers']);
并把结果发回吗?
问题标题可能会误导某些人和我解释问题标题的方式,答案应该是new \Illuminate\Database\Eloquent\Collection(<array of models>);
【参考方案1】:
其实你的$vouchers
是一个数组数组,
因此您可能希望将子数组转换为对象:
您可以简单地使用:
foreach ($vouchers['vouchers'] as $key => $value)
$vouchers['vouchers'][$key] = (object) $value;
.. 或使用集合:
$vouchers = collect($vouchers['vouchers'])->map(function ($voucher)
return (object) $voucher;
);
Laravel collections documentation
【讨论】:
【参考方案2】:这是因为数组有索引。 你可以这样做:
@for ($i = 0; $i < count($vouchers); $i++)
<p>$vouchers[$i]->name</p>
@endfor
更新
如果他们每个人都包含另一个数组,你可以试试这个:
@for ($i = 0; $i < count($vouchers); $i++)
<p>$vouchers[$i][0]->name</p>
@endfor
【讨论】:
【参考方案3】:要将数组转换为Illuminate\Database\Eloquent\Collection
,您可以将hydrate()
方法与目标Eloquent 模型一起使用,例如:
$eloquentCollection = TheEloquentModel::hydrate($arr);
【讨论】:
以上是关于Laravel - 将数组转换为雄辩的集合的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 雄辩不更新 JSON 列:数组到字符串的转换
Laravel 雄辩的 all() 方法给出错误“数组到字符串的转换”[关闭]
将 Laravel 集合/数组转换为 Javascript 数组