我有一个带有boolean类型的Doctrine2实体,在mysql中使用tinyint来存储结果。在初始添加值时,我可以将其设置为null。如果我保存为0或1,我传递的任何新值除了0或1之外,保存为0。
下面是带有get和set方法的变量。我已经完成了一个var_dump来确认该值在保存为0之前被设置为null。
/**
* @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 :(得分:1)
试试这个:
public function setCompleted($value = null)
{
if ('' === $value) {
$value = null;
}
$this->completed = $value ? true : false;
}
假设在传递空字符串时需要null
,否则根据true
的默认PHP行为,您需要false
或$value
。
正如所建议的那样,吸气剂没有副作用!这应该与您的getCompleted
完全相同,只要您使用上面的setter:
public function getCompleted()
{
if (null === $this->completed)) {
return '';
}
return $this->completed;
}