cast_on_hydrate игнорируется, когда в Query Builder указаны столбцы - PullRequest
0 голосов
/ 05 ноября 2018

Я столкнулся с чем-то совершенно конкретным в Phalcon и подумал, может ли кто-нибудь взглянуть и посоветовать, есть ли исправление?

В моей начальной загрузке я использовал ini_set () , чтобы установить значение cast_on_hydrate ini_set('phalcon.orm.cast_on_hydrate', 'on'); и я использую Phalcon 3.4.0 на PHP 7.2.11.

Если я использую методы стиля Model :: find () , cast_on_hydrate , кажется, работает нормально. Это меняется при использовании Query Builder. Обратите внимание, что я использую мультимодульное приложение с включенным пространством имен моделей.

Если я использую Qual Builder от Phalcon, чтобы создать простой запрос:

$di = \Phalcon\Di::getDefault();
$modelsManager = $di->getModelsManager();
$builder = $modelsManager
    ->createBuilder()
    ->from(['Jobs' => 'Jobs:Jobs']);
$results = $builder->getQuery()->execute();
var_dump($results[0]->id);

var_dump отображает результат, правильно приведенный в виде целого числа: int(87)

Если я добавлю несколько столбцов в смесь:

// using same getModelsManager() as above
$builder = $modelsManager
    ->createBuilder()
    ->columns(['Jobs.id', 'Jobs.user_id'])
    ->from(['Jobs' => 'Jobs:Jobs']);
// getting results from $builder is same as above example

Выход из var_dump теперь string(2) "87"

Мои вопросы по этому поводу:

  • Это ожидаемое поведение или это ошибка, о которой я должен сообщить?

  • Есть ли обходные пути? например Я задавался вопросом, использовал ли я Phalcon \ Mvc \ Model \ MetaData \ Strategy \ Annotations , будет ли это иметь какое-либо значение

  • Могу ли я как-то передать детали выбранных столбцов в построитель запросов и заставить его определенным образом привести результаты запроса? Я видел Phalcon \ Mvc \ Model \ Query :: setBindTypes () , но, похоже, это не сработало (см. Ниже)

В заключение приведу несколько примеров того, что я пробовал, но, похоже, это не работает:

// using same $builder as above
$query = $builder->getQuery();
$query->setBindTypes([
    'Jobs.id' => \Phalcon\Db\Column::BIND_PARAM_INT,
    'Jobs:Jobs.id' => \Phalcon\Db\Column::BIND_PARAM_INT,
    'id' => \Phalcon\Db\Column::BIND_PARAM_INT,
]);
$results = $query->execute();
var_dump($results[0]->id); // string(2) "87"

Буду очень признателен за любые предложения или советы, касающиеся вышеизложенного. Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 07 ноября 2018

Я получил это, отредактировав мой сервис db в инжекторе зависимостей и добавив некоторые опции

'options'  => [
    PDO::ATTR_EMULATE_PREPARES   => false,
    PDO::ATTR_STRINGIFY_FETCHES  => false,
],

При создании нового соединения MySQL это указывается только под вашим хостом, именем пользователя, именем базы данных, паролем и т. Д.

...