Phalcon castOnHydrate mysql boolean

问题描述 投票:0回答:1

我正在使用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的整数。我想得到真/假。

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

php types casting phalcon
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.