2012-11-16 128 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