php - 如何使用 Symfony 原则从我的数据库中克隆所有数据?
问题描述
我尝试克隆我的data
实体中具有item
值的所有记录cf7c1ae00f
$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 条记录。但是只添加了一条记录。
解决方案
您正在$dataEntity
用不同的内容编写相同的 5 次。您可以在循环中构造该对象来解决您的问题,但您也可以$fieldClone
直接保留并完全跳过该$dataEntity
变量。
但是,实体具有唯一的 ID,当您尝试持久化克隆的实体时会导致错误。您必须清空集合/数据库中必须唯一的 id 和其他属性。
clone
使用关键字时,您可以使用__clone()
对象所属类的方法轻松地在新对象上设置一些初始值。
因此,如果您只需要清空 id,您将向Data
该类添加一个克隆方法并将循环更改为:
数据类:
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();
推荐阅读
- c++ - C++ 读取用户输入而不按回车 (Mac OS X),与 Turbo Pascal 中的 readkey 相同
- java - 如何用java解析xml
- php - sql - 如果 create_et 日期小于特定日期,则求和价格
- c++ - 非模板类中的可变参数模板
- spring - Spring Securty - 如何在两个应用程序之间共享 bcrypt?
- r - 在 R 中使用 tidytransit 绘制 GTFS 对象路由
- spring-boot - MybatisAutoConfiguration 没有创建 dataSource bean
- sql - SQL Server - 在每个组中添加页眉和页脚字段
- laravel - 我的时间选择器插件使用了错误的时区
- typescript - 点击处理程序中的打字稿和错误类型