我如何使用 Symfony 学说从我的数据库中克隆所有数据?

How can I clone all data from my database with Symfony doctrine?

我尝试克隆我的 data 实体中具有 itemcf7c1ae00f

的所有记录
    $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();

在我的数据库中有 5 条记录。所以我希望再添加 5 条记录。但是只添加了一条记录。

你写了 5 次相同的 $dataEntity 但内容不同。您可以在循环中构建该对象来解决您的问题,但您也可以直接坚持 $fieldClone 并完全跳过 $dataEntity 变量。

但是,实体具有唯一 ID,当您尝试保留克隆的实体时,这会导致错误。您将必须清空 id 和其他在集合/数据库中必须唯一的属性。

当使用 clone 关键字时,您可以轻松地在新对象上设置一些初始值,使用对象所属的 class 的 __clone() 方法。

所以如果你只需要清空id,你会在Data class中添加一个克隆方法并将循环更改为:

数据class:

public function __clone() { 
    $this->id = null; 
}

克隆代码:

$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();