【发布时间】:2018-11-05 11:36:30
【问题描述】:
我在 Phalcon 中遇到了一些非常具体的问题,想知道是否有人可以查看并建议是否有修复?
在我的引导程序中,我使用 ini_set() 来设置 cast_on_hydrate 的值
ini_set('phalcon.orm.cast_on_hydrate', 'on'); 我在 PHP 7.2.11 上使用 Phalcon 3.4.0。
如果我使用 Model::find() 风格的方法,cast_on_hydrate 似乎工作正常。但是,当我使用 Query 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"
我非常感谢有关上述内容的任何建议或意见。提前感谢您的帮助!
【问题讨论】:
标签: phalcon phalcon-orm