2012-01-19 15 views
-2

$test他に$typeとそれとは価格が異なります。カートには$testと同じidが含まれていますが、他の$typeと他の商品(オブジェクト)です。doctrine2 findメソッド同じオブジェクトを返す

例:私は、新しいオブジェクトを取得できますか$order['test_id'] ==以前$order['test_id']

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

場合

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

$tests配列の教義では、同じオブジェクトを返しますか?

+0

Doctrineのメーリングリストに投稿さ私の解決策を読んでみてください。 $ order ['test_id'] 'が' $ cart'の各反復で同じであるならば、なぜあなたはどんな違いがあると思いますか? – Phil

+0

'$ test'には他の' $ type'と価格があります。カートは '$ test'と同じ' id'で行うことができますが、他の '$ type'とそれは別の製品(オブジェクト)です。あなたが今理解していることを願っています – rtyshyk

答えて

1

エンティティは、識別子(プライマリキー、その他の点で)によって一意に識別されます。 同じ識別子を持つ2つのエンティティは、ORMを考えているときに同じオブジェクトです。 ですから、同じオブジェクトへの参照の完全な配列だけがある必要がありますどのような(1が登録されている場合Doctrine\ORM\EntityRepository#findも同じインスタンスを取得します!) あなたはおそらく、すべての割り当て、テストエンティティの新しいインスタンスが作成されて何をすべきかフィールド値を定義したすべてのセッターを呼び出し、Doctrine\ORM\EntityManager#persist()でそれらを保持し、配列に値を設定します。 Doctrine\ORM\EntityManager#flush()を介してEntityManagerをフラッシュすると、配列内のすべての要素が別のレコードのdbに保存されます。

オブジェクトを複製する場合は、Doctrine\ORM\EntityManager#detach()で作業する必要があります。これはORMで始める場合にはお勧めできません。この場合、私は質問を理解していない程度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

関連する問題