是否可以在 Doctrine2 实体中对一个 db 字段进行多个表示?
现场示例:我在数据库字段中有加密对象。我创建了用于即时解密该字段的特殊数据类型。现在,从数据库中进行选择后,我需要在实体中同时具有加密和解密的值。
我试图以这种方式解决这个问题:
/**
* @var array
* @ORMColumn(type="EncryptedData", name="data")
*/
private $data;
/**
* @var string
* @ORMColumn(type="text", name="data")
*/
private $encryptedData;
但是教义会产生关于重复字段的错误。
然而在数据库中应该是一个字段吗?你需要这样的东西:
/**
* @var array
* @ORMColumn(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;
}
您收到重复字段错误,因为这两个字段在注释中都称为"数据"。如果要在数据库表中同时包含这两个字段,请尝试如下操作:
/**
* @var array
* @ORMColumn(type="text", name="data")
*/
private $data;
/**
* @var string
* @ORMColumn(type="text", name="encrypteddata")
*/
private $encryptedData;
也就是说,在安全方面,将敏感的未加密数据存储在数据库中不是一个好主意。
希望对您有所帮助。