Symfony2 Mongodb多次持久化对象

时间:2016-12-01 22:00:11

标签: mongodb symfony

尝试在MongoDB中保留对象。我是MongoDB和Symfony的新手。

我的代码如下:

    $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;
            }
          }


        }
      }
    } 

不幸的是,只保存了最后一个对象。

我正在使用Robomongo查看它...并且只能看到最新条目:(

任何想法如何正确地做到这一点?

另外,我的代码如何针对可读性和性能进行优化和改进?

Tahnks,

更新1:

将我的代码更改为此代码,通过删除一个额外的循环对其进行优化。

@Gerry:

这是你在每个循环上创建Neo Object而不是在循环结束时保持它的意思吗?

这段代码可以以某种方式进行优化吗?做得更好吗?

谢谢,

$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;
        }
      }


    }

} 

1 个答案:

答案 0 :(得分:0)

多次持久保存同一个对象没有任何效果,你只需要保持一次对象,它就会被管理好#34;由Doctrine撰写。

在此代码中,您基本上是一遍又一遍地更新同一个实体。如果要批量创建这些对象,则需要在迭代内调用构造函数,并在类的每个唯一实例上调用persist。