2012-01-19 65 views
-2

$test有其他$type和它的價格不同。在購物車可以是$testid相同,但其他$type,這是一個不同的產品(對象)。doctrine2查找方法返回相同的對象

例子:

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

我不明白這個問題。如果$ order ['test_id']'在'$ cart'的每次迭代中都是相同的,那麼爲什麼你會期望有任何不同呢? – Phil

+0

'$ test'有其他'$ type',它的價格不同。在購物車中可以使用'id''''test',但是其他'$ type',這是一個不同的產品(對象)。我希望你現在明白。 – rtyshyk

回答

1

實體由標識符(主鍵,用其他術語)唯一標識。 當你在ORM中思考時,具有相同標識符的兩個實體是同一個對象。 所以你會有什麼只是一個數組充滿了對同一個對象的引用(Doctrine\ORM\EntityRepository#find也將得到相同的實例,如果一個註冊!) 你應該做的可能是創建你的測試實體的新實例,分配所有通過調用您定義的所有不同設置器來爲它們賦值,然後通過Doctrine\ORM\EntityManager#persist()來保存它們並填充數組。通過Doctrine\ORM\EntityManager#flush()刷新EntityManager會將數組中的所有元素保存到單獨的記錄中。

如果你想克隆該對象,那麼你將不得不使用Doctrine\ORM\EntityManager#detach(),如果你剛開始使用ORM,我不會建議你。在這種情況下,請考慮閱讀我在Doctrine郵件列表上發佈的解決方案約Cloning Persisted Entities

+0

謝謝,我已經這樣做了。 – rtyshyk

+0

請看看我的同類[問題](http://stackoverflow.com/questions/14770507/symfony2-and-doctrine-how-to-fetch-two-different-object-for-the-same-id ) – DonCallisto