У меня есть коллекция тегов, и у каждого тега есть коллекция отображений (отношение один ко многим). Проблема в том, что когда я пытаюсь зациклить эту коллекцию сопоставлений, а затем сбрасываю свой 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;
}
Большое спасибо!
customerLabel?
/** @ORM\OneToMany(targetEntity="Mapping",
mappedBy="tag", fetch="EXTRA_LAZY",
cascade={"persist"}, orphanRemoval=true)
*/
Других решений пока нет …