2012-12-07 55 views
0

在Doctrine2實體中可以有一個db字段的幾個表示?Doctrine2:來自一個db字段的幾個對象屬性

現場示例: 我在數據庫字段中加密了對象。我創建了特殊的數據類型以便即時解密該字段。現在我需要在從db中選擇後在實體中具有加密和解密值。

我試圖解決這個問題是這樣的:

/** 
* @var array 
* @ORM\Column(type="EncryptedData", name="data") 
*/ 
private $data; 

/** 
* @var string 
* @ORM\Column(type="text", name="data") 
*/ 
private $encryptedData; 

但學說產生約重複字段錯誤。

+0

什麼@ nikita2206建議似乎非常像你想要的。也許你可以使用[LifecycleEvents] [1]來加密/解密除此之外的數據,只需要加密數據的屬性,該數據將被保留,另一個類屬性用於未加密/解密的數據,可通過getter/setter和哪些不會被存儲在數據庫中。 [1]:http://symfony.com/doc/cookbook/doctrine/event_listeners_subscribers.html – dbrumann

回答

2

但是在數據庫中應該是一個字段? 你需要的東西是這樣的:

/** 
* @var array 
* @ORM\Column(type="EncryptedData", name="data") 
*/ 
private $data; 

private $encryptedData; 

public function getData() 
{ 
    return $this->data; 
} 

public function getEncryptedData() 
{ 
    if ($this->encryptedData === null) { 
     // do with that data whatever you need 
     $this->encryptedData = processSomehow($this->data); 
    } 

    return $this->encryptedData; 
} 
+0

'type =「EncryptedData」'不是一個有效的Doctrine類型,我認爲你的意思是把註釋放在' $ encryptedData'。 – dbrumann

+0

他創建的類型 – nikita2206

+0

是的,我注意到,當我直接評論這個問題時,但到那時編輯此評論爲時已晚。抱歉。 – dbrumann

0

你所得到的重複的字段錯誤,因爲這兩個領域被稱爲「數據」,在您的註釋。如果你想在你的數據庫表中的字段都嘗試這樣的事:

/** 
* @var array 
* @ORM\Column(type="text", name="data") 
*/ 
private $data; 

/** 
* @var string 
* @ORM\Column(type="text", name="encrypteddata") 
*/ 
private $encryptedData; 

這就是說,在你的數據庫中存儲的敏感數據加密是不是一個好主意安全明智的。

希望它有幫助。

+0

感謝您的回覆。但是我有DB中唯一一個存儲加密數據的列。 – Ostin

+0

在這種情況下,請嘗試使用nikita2206的解決方案。它應該適合你。 –

相關問題