Я столкнулся с чем-то совершенно конкретным в 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"
Буду очень признателен за любые предложения или советы, касающиеся вышеизложенного. Заранее спасибо за помощь!