$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]
我如何获得新对象?
答案 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