2016-08-22 2 views
0

Здравствуйте, Мне нужно получить доступ к вложенному полю в json-файле. Я использую Laravel 5 и у меня есть это в контроллере:Как получить доступ к вложенному полю в json с Laravel?

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

Try This

 $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

Спасибо за ваш ответ, но я получить эту ошибку: ErrorException в UserController.php линии 153: array_map() ожидает параметр 1, чтобы быть действительным обратного вызова, функция «extract_name» не найден или недопустимое имя функции I сделал функцию до и после метода, который я вызываю, но не работает –

+0

Определенно это не работает, потому что функция array_map нуждается в массиве во втором параметре, а $ user-> languages ​​- не простой массив, это массив с массивы в любых полях, я не понимаю, какой тип $ user-> languages ​​ –

+0

Я тестировал это в простом скрипте с массивом массивов, поэтому он должен работать. И ваш вывод JSON показывает массив словарей. –

Смежные вопросы