2016-12-01 6 views
0

Versuch, Objekt in MongoDB zu persistieren. Ich bin neu in MongoDB und Symfony.Symfony2 Mongodb um Objekt mehrfach zu persistieren

Mein Code ist unten:

$neo = new Neo(); 
    $dm = $this->getContainer()->get('doctrine_mongodb')->getManager(); 


    $jd = new JsonDecode(); 
    $neo_obj = $jd->decode($response->getBody(),"json"); 
    foreach($neo_obj->near_earth_objects as $date => $object) { 
     $output->writeln("Date:".$date); 

     $neo->setDate($date); 

     foreach($neo_obj->near_earth_objects as $object1) { 
     foreach($object1 as $object2) 
     { 
      $output->writeln("Name:".$object2->name); 

      $neo->setName($object2->name); 

      $output->writeln("neo_reference_id:".$object2->neo_reference_id); 

      $neo->setNeoReferenceId($object2->neo_reference_id); 

      $output->writeln("is_potentially_hazardous_asteroid:".$object2->is_potentially_hazardous_asteroid); 

      $neo->setIsPotentiallyHazardousAsteroid($object2->is_potentially_hazardous_asteroid); 

      foreach($object2->close_approach_data as $object3) 
      { 
      $i=0; 
      foreach($object3->relative_velocity as $object4) 
      { 
       if($i===1) 
       { 
       $output->writeln("kilometers_per_hour:".$object4); 
       $neo->setSpeed($object4); 
       $dm->persist($neo); 
       $dm->flush(); 
       } 
       $i=$i+1; 
      } 
      } 


     } 
     } 
    } 

leider nur das letzte Objekt gespeichert wird.

ich Robomongo verwende es zu sehen ... und sehen nur neueste Eintrag :(

Irgendwelche Ideen, wie es richtig zu machen?

Auch, wie kann mein Code optimiert und für die Lesbarkeit und die Leistung verbessert werden ?

tahnks,

Update 1:

Changed my co Dazu wurde es optimiert, indem eine zusätzliche Schleife entfernt wurde.

@Gerry:

Ist das, was Sie mit dem Erstellen von Neo Objekt auf jeder Schleife bedeuten und als es am Schleifenende persistierenden?

Kann dieser Code irgendwie optimiert werden? Besser lesbar gemacht?

Danke,

$dm = $this->getContainer()->get('doctrine_mongodb')->getManager(); 


$jd = new JsonDecode(); 
$neo_obj = $jd->decode($response->getBody(),"json"); 
foreach($neo_obj->near_earth_objects as $date => $object1) { 

    foreach($object1 as $object2) 
    { 
     $neo = new Neo(); 

     $output->writeln("Date:".$date); 

     $neo->setDate($date); 

     $output->writeln("Name:".$object2->name); 

     $neo->setName($object2->name); 

     $output->writeln("neo_reference_id:".$object2->neo_reference_id); 

     $neo->setNeoReferenceId($object2->neo_reference_id); 

     $output->writeln("is_potentially_hazardous_asteroid:".$object2->is_potentially_hazardous_asteroid); 

     $neo->setIsPotentiallyHazardousAsteroid($object2->is_potentially_hazardous_asteroid); 

     foreach($object2->close_approach_data as $object3) 
     { 
     $i=0; 
     foreach($object3->relative_velocity as $object4) 
     { 
      if($i===1) 
      { 
      $output->writeln("kilometers_per_hour:".$object4); 
      $neo->setSpeed($object4); 
      $dm->persist($neo); 
      $dm->flush(); 
      } 
      $i=$i+1; 
     } 
     } 


    } 

} 

Antwort

0

das gleiche Objekt Persisting mehrmals keine Wirkung hat, müssen Sie nur ein Objekt einmal anhalten und es wird „verwaltet“ von Lehre geworden.

In diesem Code aktualisieren Sie im Grunde die gleiche Entität immer und immer wieder. Wenn Sie diese Objekte im Stapel erstellen möchten, müssen Sie den Konstruktor innerhalb der Iteration aufrufen und den Aufruf für jede eindeutige Instanz Ihrer Klasse fortsetzen.

+0

Danke. Ich aktualisierte die Frage mit Update 1 und neuen Code basierend auf Ihrem Vorschlag. Es funktioniert jetzt ... kann es besser gemacht werden? Best Practices oder Lese-/Performance-Optimierungen folgen? –

+0

Sie sollten eine StackOverflow-Frage auf eine Frage beschränken. Fühlen Sie sich frei, eine andere Frage über Optimierung zu stellen und diese Antwort auf Ihre ursprüngliche Frage zu akzeptieren. – Gerry

Verwandte Themen