Повторяющаяся запись в цикле ArrayCollection (One To Many Entity)

У меня есть коллекция тегов, и у каждого тега есть коллекция отображений (отношение один ко многим). Проблема в том, что когда я пытаюсь зациклить эту коллекцию сопоставлений, а затем сбрасываю свой Entity Manager, создается дубликат всех тегов, и я не понимаю, почему.

Вот код с размером пакета. Первый foreach зацикливает коллекцию тегов, а затем я получаю все сопоставления этого тега. Затем, когда я сбрасываю на foreach, я получаю исключение, но если я сбрасываю только один раз в конце (после for), это работает. Не могли бы вы мне помочь?

Вот исключение:

Возникла исключительная ситуация при выполнении ‘INSERT INTO tag (name) VALUES (?,?,?)’ С параметрами [«Тест 1»]:
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;
}

И сущность 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

Решение

customerLabel?

/** @ORM\OneToMany(targetEntity="Mapping",
mappedBy="tag", fetch="EXTRA_LAZY",
cascade={"persist"}, orphanRemoval=true)
*/
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]