2016-02-25 60 views
0

我是laravel的新手,現在正在使用Laravel 5.2版本。如何在Laravel 5中從數組變量中提取數組項?

我有這一套數組:

$exam_data = $this->template->where('id', $id) 
          ->with('data') 
          ->get(); 

現在我想檢索使用Laravel該數組內的「數據」數組:

{ 
     "id": 2, 
     "title": 'sample', 
     "question_index": 1, 
     "question": "Hope you could help me buddy.", 
     "data": [ 
        { 
         "id": 1, 
         "answer": 'yes', 
        } 
       ] 
    } 

陣列使用以下雄辯查詢創建5.

我試過下面的代碼但無濟於事......

$user_data = $exam_data->data; 

$user_data = $exam_data['data']; 

$user_data = $exam_data->get('data'); 

雖然我可以用它摘下此:

$user_data = $exam_data->pluck('data'); 

其中有這樣的結果(我不知道爲什麼,但我不太滿意就可以了):

[ 
    [ 
     { 
      "id": 1, 
      "answer": 'yes', 
     } 
    ] 
] 

有什麼我可以用來檢索'data'數組的方法或方法?

例如像:

$user_data = $exam_data->data; 

和有關訪問 '答案' 場怎麼樣?

$user_data = $exam_data->data->answer; 
Is this possible? 

欣賞任何意見或建議。謝謝!

+0

可以嘗試$ exam_data ['數據']? – emuigai

+0

@emuigai是我已經做到了。我也嘗試將其轉換爲JSON和數組,但仍然無濟於事。 –

+0

@AlexeyMezenin恰好是。 –

回答

0
$exam_data = $this->template->where('id', $id) 
          ->with('data') 
          ->get(); 

返回m的ultiple記錄,就像一個Collection

Collection [ 
    0 => Collection, 
    1 => Collection, 
] 

這就是爲什麼你不能從$exam_data訪問 「數據」 直接,而這正是->pluck()爲你做。

pluck()不一樣:

$filtered = []; 
foreach ($exam_data as $exam) { 
    $filtered[] = $exam->data; 
} 

如果你dd($filtered)你得到你以後。

如果你期待一個記錄,但是,你可以使用->first()代替->get(),它返回一個收集和那裏你可以訪問與數據關係:

$exam_data = ..... ->first(); 
$data = $exam_data->data; 
+0

那麼,它取決於關係,如果是單個或多個(belongsTo或belongsToMany,例如)。轉儲'$ exam_data-> data',你會看到它是多個項目的集合還是隻有一個;) –

+0

哇徹底的解釋!我試了一下,它的工作原理。 first()方法節省了麻煩。 感謝隊友。:) –

+0

我試着訪問成員,第一個()方法也適用。畢竟這完全是關於遞歸的。現在我明白了它所需要的一切。非常感謝 –