【问题标题】:How can I clone all data from my database with Symfony doctrine?如何使用 Symfony 原则从我的数据库中克隆所有数据?
【发布时间】:2019-08-29 14:01:45
【问题描述】:

我尝试克隆我的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 条记录。但是只添加了一条记录。

【问题讨论】:

    标签: php symfony doctrine entity clone


    【解决方案1】:

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

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

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

    所以如果你只需要清空id,你可以在Data类中添加一个clone方法,并将循环改为:

    数据类:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 2010-10-22
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 2022-07-28
      相关资源
      最近更新 更多