2017-10-17 36 views
1

J'ai un fichier json et Im essayant d'inclure l'information dans une table MySQL DB. fichier JSON:Json obtenir le contenu en utilisant 2 foreach en php pour récupérer plusieurs nœuds profondeur

"categories": [{ 
      "id": "cat0101000", 
      "name": "TVs", 
      "url": "https://www.url.com/site/", 
      "path": [ 
       { 
        "name": "Home", 
        "id": "cat00000" 
       }, 
       { 
        "name": "TV & Home Theater", 
        "id": "cat0100000" 
       }, 
       { 
        "name": "TVs", 
        "id": "cat0101000" 
       } 
      ], 

Le code pour inclure chaque registre:

public function handle() 
{ 
    $json = file_get_contents('resources/json/categories_0001.json'); 
    $data = json_decode($json); 
    $array1 = (array)$data; 
    foreach ($array1['categories'] as $obj) { 
     DB::table('categories')->insert(array(
      'categoryId' => ((isset($obj->id) ? $obj->id : 1)), 
      'categoryName' => ((isset($obj->name) ? $obj->name : null)), 
      'parentId' => end($obj->path)->id, 
      'URL' => ((isset($obj->url) ? $obj->url : 1)), 
     )); 
    } 
} 

Mon idée est d'inclure tous les enregistrements à l'intérieur "path" concaténer tous les champs. par exemple:

'chemin' =>. "$ obj-> chemin-> id". "\". "$ obj-> chemin-> id". "\". "$ obj-> chemin-> id"

J'ai essayé foreach à l'intérieur mais sans succès. toute aide appréciée.

Répondre

1

Vous avez changé objet à un tableau et essayer d'obtenir, comme le changement d'objet ce

$array1 = (array)$data; 
    foreach ($array1['categories'] as $obj) { 

Pour

foreach ($data->categories as $obj) { 
+0

mon problème est que Im en utilisant DB :: Table ('catégories') -> insérer (array (et je ne trouve pas le moyen d'inclure un foreach à l'intérieur de cette instruction (-> insert) –

+1

Vous pouvez faire un tableau d'abord et ensuite mettre à l'intérieur de l'insert – C2486