2012-06-02 5 views
2

동적 속성을 데이터베이스에 저장하려고합니다.Doctrine : 동적 속성을 저장하는 방법

예 : 일부 사용자는 사용자 지정 특성을 사용하여 프로필을 만들려고합니다. 이것은 나이, 취미, 직업, 학교 또는 다른 것일 수 있습니다. 모든 사용자는 자신의 특성을 설정할 수 있습니다. 또한 내가 쉽게 속성을 추가 및 제거 할 수 있습니다 속성 자체와 값을 읽을 수있는 것이 가능이 구성에

$characteristics = array(
     0 => array('age', 22), 
     1 => array('hobby', 'php'), 
     2 => array('food', 'pizza'), 
    ); 

: 서버 측에서이 같이 볼 수 있었다.

이제 교리별로 이러한 데이터를 저장하고 싶습니다.

문제는 내가이 최선 어떻게 지금 :

  1. 가 배열
  2. JSON을 지속을
  3. XML
  4. 다른?

답변

8

간단하게 유지하려는 경우 가장 좋은 방법은 단순히 배열을 사용하는 것입니다.

Doctrine 2는 "배열"유형을 지원합니다. 해당 유형으로 속성을 매핑하면 자동으로 직렬화되고 데이터베이스로 직렬화됩니다.

예를 들어, 당신은 같은 것을 할 수있는 :

class MyEntity { 
    /** @Column(type="array") */ 
    private $attributes = array(); 

    public function setAttribute($name, $value) { 
     $this->attributes[$name] = $value; 
    } 

    public function getAttribute($name) { 
     return $this->attributes[$name]; 
    } 
} 

이 같은 접근 방식은 쉽게 속성을 저장할 수 있습니다 것을, 그리고 만약 그렇다면,이 저장된 방법의 세부 사항을 추상화도 할 것이다 당신 (예를 들어 어쩌면 EAV 테이블을 사용하는 등) 앞으로 다른 코드를 변경할 필요가 없을 것입니다.

+0

안녕하세요, 저는 또한 배열을 재사용 할 계획을 세우고 자합니다. 예를 들어 일부 메타 데이터의 경우 이는 매우 좋습니다. 이 구조체를 재사용 할 수 있다면 이미지 정보 (위치, 카메라 등)에 세부 정보를 추가하는 것이 좋을 것이라고 상상해보십시오. 배열을 사용하면 두 번째 값을 삭제하고 원시 배열 구조를 저장할 수 있습니다. 유일한 단점은 전체 프로세스가 하드 코딩되어야한다는 것입니다. 그러나 나는 더 나은 방법이 있다고 생각하지 않습니다. – bodokaiser

+0

검색이 어떻게 작동 할까? – mr1031011

+0

@ mr1031011 그것은 매우 좋지 않을 것입니다. 사용자 지정 속성을 사용하면 임의의 필드가있는 문서를 아주 잘 처리 할 수 ​​있으므로 별도의 검색 엔진 (예 : ElasticSearch)을 사용하는 것이 가장 좋습니다. –

관련 문제