2012-12-07 4 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/current/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의 해결책을 시도하십시오. 그것은 당신을 위해 일해야합니다. –