2017-09-14 60 views
0

我有一個接收API數據的類,我想將所有響應包裝到集合類中。所以,我從API調用接收數據,將它變成一個普通的關聯php數組,然後使用幫助器將其包裝起來。將關聯數組轉換爲類似於Eloquent查詢集合的集合

我只是期待它的工作就像Eloquent一樣,你可以將一個鍵作爲一個集合屬性來引用,但它不會。

下面是響應數據的一個例子,我會得到:

$data = [ 
    'status' => 'SUCCESS', 
    'message' => 'Your request was received.', 
    'data' => [ 
     'first_name' => 'John', 
     'last_name' => 'Doe', 
     'address' => [ 
      'street' => '123 Main St.', 
      'city' => 'Any City', 
      'state' => 'TX', 
      'zip' => '12345', 
      'country' => 'USA' 
     ], 
     'email' => '[email protected]', 
     'phone' => '(123) 456-7890', 
     'role' => 'Administrator', 
     'active_orders' => 3 
    ] 
]; 

$response = collect($data); 

我想能夠集合中來包裝這一數據,並使用它像這樣:

$response->data->address->street$response->data->first_name

但是,我得到一個錯誤,說Property [data] does not exist on this collection instance.我必須參考它像一個數組,如果我想訪問它。例如。 $response['data']['first_name']。如果我想使用這種語法,我會保持它作爲一個數組。

如何遞歸設置我的集合屬性作爲數組鍵名,這樣我就可以像使用Eloquent查詢那樣使用它了?

+0

你是如何得到這個迴應的?如果你是'json_decode'作爲HTTP請求的結果,你可以改爲'json_decode'返回一個'StdClass'對象表示而不是數組。這將允許您參考您打算提供的數據。 –

回答

1

如何遞歸設置我的集合屬性作爲數組鍵名,這樣我就可以像使用Eloquent查詢那樣使用它了?

json_decode()通常解構成這樣的對象。但是你需要從JSON開始。所以,這似乎很愚蠢,而且可能效率不高,但這應該是你想要的:

$response = json_decode(json_encode($data)); 
+0

這是一種將數組轉換爲對象的有效方法,但我想特別利用Laravel的集合類方法。 – Mark

+0

我認爲你是mixin Collections和Models你不能在不使用' - > first()'前使用' - > property' @ @Mark – aaron0207