2017-11-24 13 views
0

私はタグのコレクションを持っており、すべてのタグはマッピングのコレクション(1対多リレーション)を持っています。問題は、このコレクションのコレクションをループしてから、Entity Managerをフラッシュすると、すべてのタグの複製が作成され、その理由を理解できないということです。ループとArrayCollection(1対多のエンティティ)の重複エントリ

ここにはバッチサイズのコードがあります。最初のforeachはタグコレクションをループし、このタグのすべてのマッピングを取得します。その後、私はforeachにフラッシュするときに私は例外が発生しますが、私は最後に一回だけフラッシュする(の後)、それは動作します。手伝ってくれませんか? [ "試験1"]のparamsと '(???)タグ(名前)値にINSERT' の実行中に例外が発生し

:ここ

は例外で SQLSTATE [23000]を:整合性制約違反:キーの1062重複エントリ '試験1' 'UNIQ_C09225D35E237E06'

ここコード:

  $batchSize = 100; //Entity Manager will flush every batchSize times 
      $i = 0; 

      foreach ($aTagCollection as $oTag) { 
       $aMapping = $oTag->getMapping(); 

       foreach ($aMapping as $oMapping) { 

       } 

       if (($i % $batchSize) === 0) { 
        $this->em->flush(); //Execute all updates every 100 times 
        $this->em->clear(); //Detaches all objects from Doctrine 
       } 

       $i++; 
      } 

      $this->em->flush(); 

エンティティタグ

/** @ORM\OneToMany(targetEntity="Mapping", 
     mappedBy="customerLabel", fetch="EXTRA_LAZY", 
     cascade={"persist"}, orphanRemoval=true) 
    */ 
    private $mapping; 


    public function __construct() 
    { 
     $this->mapping = new ArrayCollection(); 
    } 


    public function addMapping(Mapping $mapping) 
    { 
     $this->mapping[] = $mapping; 

     return $this; 
    } 


    public function removeMapping(Mapping $mapping) 
    { 
     $this->mapping->removeElement($mapping); 
    } 


    public function getMapping() 
    { 
     return $this->mapping; 
    } 

とエンティティのマッピング:

/** 
    * @ORM\ManyToOne(targetEntity="Tag", inversedBy="mapping", cascade={"persist"}) 
    * @ORM\JoinColumn(name="tag_id", referencedColumnName="id", onDelete="CASCADE") 
    */ 
    private $tag; 

    public function setTag(Tag $tag = null) 
    { 
     $this->tag= $tag; 

     return $this; 
    } 

    public function getTag() 
    { 
     return $this->tag; 
    } 

ありがとうございました!

+0

私はいずれかが存続表示されていない()() –

+0

は、そのため私は、私が唯一のフラッシュと2 foreachsを持っている...すべてのタグの重複作成された理由を理解ドントこれ以上何もない – David

答えて

0

customerLabel?ちょうどフラッシュあなたのコード内

/** @ORM\OneToMany(targetEntity="Mapping", 
    mappedBy="tag", fetch="EXTRA_LAZY", 
    cascade={"persist"}, orphanRemoval=true) 
*/ 
関連する問題