2015-08-16 84 views
0

情況如下: 我有一個表(PERSONS)與記錄集合。它的結構如下:創建表並克隆從舊錶到新的一個記錄

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

這是員工的「銀行」。那麼,我必須準備,每年對這個表格進行存檔(對於未使用的數據,這樣的黑盒子)。它應該分四步完成:

  1. 檢查是否存在存檔例如2015_PERSONS
  2. 如果沒有,創建表從個人表2015_PERSONS
  3. 拷貝單個記錄2015_PERSONS表
  4. 刪除個人表這個紀錄

不難正常的方式,但我盡力去做沒有特殊的檔案文件實體,我發現了一些問題。第一和第四步對我來說很容易,但第二和第三步不是。 第二步是以下(在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表保存準備的數據副本。要善於提示我。

+0

hm,爲什麼不使用'getManager() - > persist()'和' - > flush()'?關於複製到第二個對象更好地使用第二種方法 – nowiko

+0

嗨,但我沒有實體爲$秒,所以我不能flush()它。對? – Tad

+0

好的,那麼'new Second()'和save()'做了什麼方法? – nowiko

回答

0

是的,我知道如何做到這一點「手動」,因爲我通知上面,但我試圖找到更多的「學說」的方式。也許通過「元數據」,但我用Symfony2新鮮自己解決這個問題。

相關問題