2012-11-16 220 views
2

我有一個使用mysql中的tinyint來存儲結果的具有布爾類型的Doctrine2實體。在最初添加一個值時,我可以將其設置爲null。如果我保存爲0或1,則任何新值都會通過,而不是0或1保存爲0.Doctrine 2將布爾值設置爲null

下面是帶有get和set方法的變量。我已經做了的var_dump以確認該值被設置爲空保存爲0。

/** 
* @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

它可能不是原因,但干將應該不會有副作用(您的getter實際上在某些情況下修改的值) 。 –

+0

你有沒有碰運氣? – timhc22

+0

我從來沒有把它保存爲空,儘管我在這篇文章後很快實現了一項工作。對不起 – Tom

回答

1

嘗試此之前:

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

假設,傳遞一個空字符串,當你想null,否則您需要truefalse根據默認的PHP行爲$value

而且正如建議的那樣,吸氣劑沒有副作用!這應該是完全一樣的getCompleted,只要你使用上面的二傳手:

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

    return $this->completed; 
} 
+1

不管發生什麼問題,問題都不在於實體內的值的設置。 $ this-> completed被設置爲null,無論您的方式和我的方式如何,但是當保存發生時,1會保存爲1,其他任何內容(包括null)將保存爲0. – Tom

+0

這將設置任何「虛假」爲虛假(0) – zgr024