Tento clonar todos os registros da minha data
entidade que têm o item
valorcf7c1ae00f
$dataEntity= new Data();
$cloneArray = $this->em->getRepository(Data::class)->findBy(['item' => 'cf7c1ae00f']);
foreach ($cloneArray as $cloneItem) {
$fieldClone = clone $cloneItem;
$dataEntity->setItem($fieldClone);
$this->em->persist($dataEntity);
}
$this->em->flush();
Em meu banco de dados, existem 5 registros. Portanto, espero que outros 5 registros sejam adicionados. Mas apenas um registro é adicionado.
Você está escrevendo o mesmo $dataEntity
5 vezes com conteúdos diferentes. Você pode construir esse objeto no loop para resolver seu problema, mas também pode persistir $fieldClone
diretamente e pular a $dataEntity
variável completamente.
No entanto, as entidades têm ids exclusivos e isso levará a erros quando você tentar persistir uma entidade clonada. Você teria que esvaziar o id e outros atributos que devem ser únicos na coleção / banco de dados.
Você pode definir facilmente alguns valores iniciais em um novo objeto quando a clone
palavra-chave é usada, usando o __clone()
método da classe à qual o objeto pertence.
Portanto, se você só precisa esvaziar o id, adicione um método clone à Data
classe e altere o loop para:
Classe de dados:
public function __clone() {
$this->id = null;
}
Código de clonagem:
$cloneArray = $this->em->getRepository(Data::class)->findBy(['item' => 'cf7c1ae00f']);
foreach ($cloneArray as $cloneItem) {
# Clone the object and automatically run the `__clone()` method of the class
$fieldClone = clone $cloneItem;
$this->em->persist($fieldClone);
}
$this->em->flush();
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras