尝试在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;
}
}
}
}
答案 0 :(得分:0)
多次持久保存同一个对象没有任何效果,你只需要保持一次对象,它就会被管理好#34;由Doctrine撰写。
在此代码中,您基本上是一遍又一遍地更新同一个实体。如果要批量创建这些对象,则需要在迭代内调用构造函数,并在类的每个唯一实例上调用persist。