Phalcon castOnHydrate mysql логический - PullRequest
0 голосов
/ 09 апреля 2019

Я использую 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 голосов
/ 09 апреля 2019

самое быстрое решение, которое я знаю:

создать установщик и получатель для столбца в модели и защитить свойство

например столбец is_finished

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

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

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

теперь вы можете использовать сеттер и геттер или нет, он будет конвертирован автоматически

$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
...