是否可以在Doctrine2实体中对一个db字段进行多次表示?
实例: 我在数据库字段中加密了对象。我已经创建了特殊的数据类型,用于即时解密该字段。现在,我需要在从db中选择加密和解密后的值。
我试图用这种方式解决这个问题:
/**
* @var array
* @ORM\Column(type="EncryptedData", name="data")
*/
private $data;
/**
* @var string
* @ORM\Column(type="text", name="data")
*/
private $encryptedData;
但是,学说会产生有关重复字段的错误。
答案 0 :(得分: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;
}
答案 1 :(得分:0)
您收到重复字段错误,因为这两个字段在注释中称为“数据”。如果您想在数据库表中同时使用这两个字段,请尝试以下操作:
/**
* @var array
* @ORM\Column(type="text", name="data")
*/
private $data;
/**
* @var string
* @ORM\Column(type="text", name="encrypteddata")
*/
private $encryptedData;
也就是说,将敏感的未加密数据存储在数据库中并不是一个好主意。
希望它有所帮助。