2012-11-16 9 views
2

결과를 저장하기 위해 mysql에 tinyint를 사용하여 부울 유형의 Doctrine2 엔티티를 보유했습니다. 값의 초기 추가시 null로 설정할 수 있습니다. 0 또는 1로 저장 한 값을 0 또는 1 이외의 값으로 저장하면 0으로 저장됩니다.Doctrine 2 부울을 null로 다시 설정합니다.

다음은 get 및 set 메서드를 사용하는 변수입니다.

public function setCompleted($value = null) 
{ 
    if ('' === $value) { 
     $value = null; 
    } 
    $this->completed = $value ? true : false; 
} 

을 빈 문자열을 전달할 때 당신이 원하는 것을 가정 : 나는

/** 
* @var string $completed 
* 
* @ORM\Column(name="is_completed", type="boolean", length=1, nullable=true) 
* @Api(type="field") 
*/ 
private $completed; 

/** 
* Set completed 
* 
* @param boolean $value 
*/ 
public function setCompleted($value = null) 
{ 
    if ($value=='') { 
     $value = null; 
    } 
    $this->completed = $value; 
} 

/** 
* Get completed 
* 
* @return boolean 
*/ 
public function getCompleted() 
{ 
    if (is_null($this->completed)) { 
     $this->completed = ''; 
    } 
    return $this->completed; 
} 
+0

그것은 아마도 원인은 아니지만, 게터는 부작용이 없어야을 (당신의 게터 실제로 어떤 상황에서 값을 수정) . –

+0

혹시 이걸 가지고 행운이 있었나요? – timhc22

+0

나는이 게시물 이후 상당히 빨리 작업을 구현했지만 null로 저장하지 못했습니다. 죄송합니다 – Tom

답변

1

0으로하는이 시도 저장하기 전에 값이 null로 설정되고 있음을 확인하기 위해서 var_dump를 수행 한 null, 그렇지 않은 경우 $value의 기본 PHP 동작을 기반으로 true 또는 false이 필요합니다.

그리고 제안 된대로 getters에 부작용이 없습니다! 이것은 한 위의 세터 사용할 때, 당신의 getCompleted과 정확하게 일치해야합니다

public function getCompleted() 
{ 
    if (null === $this->completed)) { 
     return ''; 
    } 

    return $this->completed; 
} 
+1

무엇이 잘못 되었습니까 문제는 엔티티 내의 값 설정과 다릅니다. $ this-> completed가 여러분의 방법과 광산 모두에서 원하는대로 null로 설정되어 있지만 save가 발생하면 1이 1로 저장되고 null을 포함하여 다른 것이 0으로 저장됩니다. – Tom

+0

이것은 "위증"을 거짓으로 (0) – zgr024