创建表并将一个记录从旧表克隆到新表

时间:2015-08-16 05:55:34

标签: symfony

情况如下: 我有一个表(PERSONS)与记录集合。它的结构:

id, 
created, 
modified, 
number, 
first_name, 
… (up to 30 positions)

这是员工的“银行”。好吧,我必须准备这个表的年度存档(这样的黑盒子用于未使用的数据)。它应该分四个步骤完成:

  1. 检查存档是否存在,例如2015_PERSONS
  2. 如果不是,请创建表2015_PERSONS
  3. 将PERSONS表中的单个记录复制到2015_PERSONS表
  4. 从PERSONS表中删除此记录
  5. 正常方式并不难,但我尝试在没有存档文件的特殊实体的情况下进行,我发现了一些问题。第一步和第四步对我来说很容易,但第二和第三步没有。 第二步是以下(在PERSONS控制器中):

    $manager  = $this->getDoctrine()->getManager();
    $metadata = $manager->getClassMetadata(PERSONS::class);
    $metadata->setPrimaryTable(array('name' => ‘2015_PERSONS’));
    $schema = new SchemaTool($manager);
    $schema->createSchema(array($metadata));
    

    并创建了存档表,但有一点不同。在第一个表“id”字段是“bigint 12”自动增量(MySQL),但在第二个“id”是“int 11”自动增强,我不知道为什么。其余字段(int,text,varchar)是相同的。 PERSONS实体中的定义如下:

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
     protected $id;
    

    但根本问题是第三步,因为我找不到放置数据的方法。我尝试通过以下方式实现:

    $data = $this->getRepo('PERSONS')->findOneBy(1);
    $second = clone $data;
    $second->setId(null);
    $second->save();
    

    OR

    $second = new Second();
    $second->fromArray($data->toArray());
    $second->save();
    

    并且不知道如何找到2015_PERSONS表的句柄以保存准备好的数据副本。非常友好地提示我。

1 个答案:

答案 0 :(得分:0)

是的,我知道如何按照上面的说法“手动”,但我试图找到更多“教条”的方式。也许是通过“元数据”,但我想用Symfony2来解决这个问题。