3

結果を格納するためにmysqlでtinyintを使用するブール型のDoctrine2エンティティがあります。値を最初に追加するときに、それを 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;
}
4

1 に答える 1

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;
}
于 2012-11-17T19:35:40.193 に答える