2016-08-22 117 views
0

你好我需要訪問json文件中的嵌套字段。我使用Laravel 5,我有這樣的控制器:如何使用Laravel訪問json中的嵌套字段?

public function getLanguages($id){ 
    $user=User::find($id); 

    if (!$user) 
    { 
     return response()->json(['errors'=>array(['code'=>404,'message'=>'No se encuentra un usuario con ese código.'])],404); 
    } 

    return Response::make(json_encode($user->languages), 200)->header('Content-Type', 'application/json'); 

} 

這是輸出:

[ 
    { 
    "id": 1, 
    "name": "Español", 
    "pivot": { 
     "id_user": 1, 
     "id_language": 1 
    } 
    }, 
    { 
    "id": 2, 
    "name": "Inglés", 
    "pivot": { 
     "id_user": 1, 
     "id_language": 2 
    } 
    }, 
    { 
    "id": 3, 
    "name": "Alemán", 
    "pivot": { 
     "id_user": 1, 
     "id_language": 3 
    } 
    } 
] 

我想訪問該用戶有語言的名字,我怎麼能做到這一點?這是用戶和語言之間的多對多關係,通過用戶模型更好地訪問語言?或從數據透視表訪問?

感謝。

+0

你的意思是你想獲得一個JSON只包含語言的名字? – KmasterYC

回答

0

嘗試這個

 $user  = User::find($id)->languages->toArray(); 
     $languages = array_column($user, 'name'); 

     return Response::make(json_encode($languages), 200)->header('Content-Type', 'application/json'); 
+0

它爲我工作!非常感謝你! –

0

由於$user->languages是包含語言的陣列,可以使用array_map,例如

function extract_name($el) { 
    return $el['name']; 
} 

$names = array_map('extract_name', $user->languages); 
+0

謝謝你的回答,但我得到這個錯誤:在UserController.php線 ErrorException 153: array_map()預計參數1是一個有效的回調,功能「extract_name」未找到或無效的函數名 我在我調用的方法之前和之後都放了函數,但沒有工作 –

+0

Definitly它不起作用,因爲array_map函數需要第二個參數中的數組,並且$ user-> languages不是一個簡單的數組,它是一個數組數組在任何領域,我不明白什麼樣的類型是$用戶 - >語言 –

+0

我測試了這個在一個簡單的腳本與數組數組,所以它應該工作。你的JSON輸出表示一個字典數組。 –