Doctrine2& Symfony2:在foreach循环中保存时重置ID值

时间:2011-12-14 13:49:08

标签: symfony doctrine-orm

请参阅以下代码:

$passwords = array('aaaa', 'bbbb', 'ccccc', 'dddd', 'eeeee');

$em = $this->getDoctrine()->getEntityManager();
$foo = new Foo();
$foo->setName('Joe Bloggs');
$foo->setTitle('Mr');
foreach ($passwords as $password) {
    $foo->setPassword($password);
    $em->persist($foo);
    $em->flush();
}

这里当我尝试保存$foo对象时,我希望将它保存X次,其中X是$passwords的长度,但是它只插入一次值,然后另外4次更新它。

是否有人知道如何实现这一目标,以便将记录插入5次。

由于

1 个答案:

答案 0 :(得分:3)

创建更新之间的选择是在对象标识上进行的:

  • new object =>创建
  • 现有对象=>更新

所以,不要试图通过不重复setName和setTitle来优化处理,但是你只能执行一次flush();):

$passwords = array('aaaa', 'bbbb', 'ccccc', 'dddd', 'eeeee');

$em = $this->getDoctrine()->getEntityManager();
foreach ($passwords as $password) {
    $foo = new Foo();
    $foo->setName('Joe Bloggs');
    $foo->setTitle('Mr');
    $foo->setPassword($password);
    $em->persist($foo);
}
$em->flush();