在查询生成器中指定列时忽略cast_on_hydrate

时间:2018-11-05 11:36:30

标签: phalcon phalcon-orm

我在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 似乎运行良好。但是,当我使用查询生成器时,这种情况会发生变化。请注意,我使用的是启用了模型名称间隔的多模块样式应用。

如果我使用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 :(得分:0)

在Dependency Injector中编辑我的db服务并添加一些选项,使我可以正常工作

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

这在创建新的MySQL连接时位于您的主机,用户名,dbname,密码等下方。