0
情況如下: 我有一個表(PERSONS)與記錄集合。它的結構如下:創建表並克隆從舊錶到新的一個記錄
id,
created,
modified,
number,
first_name,
… (up to 30 positions)
這是員工的「銀行」。那麼,我必須準備,每年對這個表格進行存檔(對於未使用的數據,這樣的黑盒子)。它應該分四步完成:
- 檢查是否存在存檔例如2015_PERSONS
- 如果沒有,創建表從個人表2015_PERSONS
- 拷貝單個記錄2015_PERSONS表
- 刪除個人表這個紀錄
不難正常的方式,但我盡力去做沒有特殊的檔案文件實體,我發現了一些問題。第一和第四步對我來說很容易,但第二和第三步不是。 第二步是以下(在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」autoincrement(MySQL),但第二個「id」是「int 11」autoincrenent,我不知道爲什麼。其餘的字段(int,text,varchar)是相同的。在人身上的定義如下:
/**
* @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表保存準備的數據副本。要善於提示我。
hm,爲什麼不使用'getManager() - > persist()'和' - > flush()'?關於複製到第二個對象更好地使用第二種方法 – nowiko
嗨,但我沒有實體爲$秒,所以我不能flush()它。對? – Tad
好的,那麼'new Second()'和save()'做了什麼方法? – nowiko