问题描述
我调用一个 API 并将响应放入一个集合中(认为这是一个好主意),将它重新定义为一个带有 foreach 的 eloquent 集合
我的特点:
class AzureRest
{
public static function getSubscription($subscriptionId)
{
$token = TokenCache::getRestApiToken();
$url = "https://management.azure.com/subscriptions/".$subscriptionId."?api-version=2020-01-01";
$json = Http::withToken($token)->get($url);
return collect(json_decode($json,true,5))->all();
}
}
我的 livewire 控制器
class ShowSubscriptions extends Component
{
public $subscriptionId;
public function mount()
{
$this->subscriptionId;
}
public function render()
{
return view('livewire.azure.show-subscriptions',[
'details' => AzureRest::getSubscription($this->subscriptionId)
]);
}
}
我的刀
<div>
@foreach($details as $detail)
<p>{{$detail->foo}}</p>
<p>{{$detail->bar}}</p>
<p>{{$detail->baz}}</p>
@endforeach
</div>
这是集合的样子:
解决方法
当您在集合中调用 <?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:radius="20dp"/>
<!-- This is the border color -->
<stroke
android:width="2dp"
android:color="@color/purple_700"/>
<!-- This is the background color -->
<solid
android:color="@color/white"/>
</shape>
方法时,它会返回底层数组。
例如
all()
因此,当您尝试执行 collect([1,2,3])->all();
// [1,3] <--- returned
时,它会返回错误,因为它实际上应该是 $detail->foo
,因为它在执行 $detail['foo']
后作为数组返回。
所以尝试删除 ->all()
,它应该可以工作。
我应该多睡一会儿,我终于明白了:
我删除了 trait 上的集合
- return collect(json_decode($json,true,5))->all();
+ return json_decode($json,5);
并像往常一样访问数组
<p>{{$details['id']}}</p>
<p>{{$details['displayName']}}</p>
<p>{{$details['subscriptionPolicies']['spendingLimit']}}</p>
快乐编码;)