doctrine2 find方法返回相同的对象

时间:2012-01-19 11:43:34

标签: php symfony doctrine-orm

$test还有其他$type,价格不同。在购物车中可以$test使用相同的id,但是其他$type,这是一个不同的产品(对象)。

示例:

    foreach ($cart as $order) {
        $test = $em->getRepository('OrfosCoreBundle:Test')->find($order['test_id']);
        $test->setType($order['test_type']);
        $tests[] = $test;
        $test = null;
    }
如果$tests ==上一个$order['test_id']

并在$order['test_id']数组原则中返回相同的对象

array
  0 => 
    object(Orfos\CoreBundle\Entity\Test)[105]
  1 => 
    object(Orfos\CoreBundle\Entity\Test)[105]

我如何获得新对象?

1 个答案:

答案 0 :(得分:1)

实体由标识符(主键,换句话说)唯一标识。 当您在ORM中思考时,具有相同标识符的两个实体是相同的对象。 那么你将拥有的只是一个充满对同一对象的引用的数组(如果注册了一个对象,Doctrine\ORM\EntityRepository#find也将获得相同的实例!) 您应该做的是创建Test实体的新实例,通过调用已定义的所有不同的setter为它们分配所有字段值,通过Doctrine\ORM\EntityManager#persist()保留它们并填充数组。通过Doctrine\ORM\EntityManager#flush()刷新EntityManager会将数组中的所有元素保存到不同记录中的db中。

如果你想要克隆对象,那么你将不得不使用Doctrine\ORM\EntityManager#detach(),如果你刚开始使用ORM,我不建议你这样做。在这种情况下,请考虑阅读Doctrine邮件列表中发布的关于Cloning Persisted Entities

的解决方案