Phalcon castOnHydrate MySQL布尔值

时间:2019-04-09 10:12:18

标签: php types casting phalcon

我使用的是Phalcon 3,我想在查询数据库时返回实型,因此API响应更好。所以我正在使用这种配置:

\Phalcon\Mvc\Model::setup(['castOnHydrate' => false]);

$di->set('db', function () use ($config) {
    return new DbAdapter(array(
        'host' => $config->database->host,
        'username' => $config->database->username,
        'password' => $config->database->password,
        'dbname' => $config->database->dbname,
        'charset' => $config->database->charset,
        'options' => [
            PDO::ATTR_EMULATE_PREPARES => false,
            PDO::ATTR_STRINGIFY_FETCHES => false,
        ]
    ));
});

问题是当mysql具有布尔类型(TINYINT 0或1)时

如何将此TINYINT转换为布尔值?因为castOnHydrate只会返回整数0或1。我想得到true / false。

也许有一种方法可以配置我的模型以指定哪一列是布尔值?

1 个答案:

答案 0 :(得分:0)

我知道的最快的解决方案:

为模型中的列创建一个setter和getter并保护属性

例如列is_finished

/**
 *
 * @var integer
*/
protected $is_finished;

public function getIsFinished()
{
    return boolval($this->is_finished);
}

public function setIsFinished($value)
{
    $this->is_finished = intval($value);
}

现在您可以使用setter和getter,否则它将自动转换

$model = Model::findFirst();

$is_finished = $model->is_finished; // true|false

$is_finished = $model->getIsFinished(); // true|false

$model->is_finished = false; // 0

$model->setIsFinished(true); // 1