phalcon - 在查询生成器中指定列时忽略 cast_on_hydrate
问题描述
我在 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"
对于上述内容,我将不胜感激。提前感谢您的帮助!
解决方案
我通过db
在 Dependency Injector 中编辑我的服务并添加一些选项来完成这项工作
'options' => [
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_STRINGIFY_FETCHES => false,
],
创建新的 MySQL 连接时,它位于您的主机、用户名、数据库名、密码等之下。
推荐阅读
- sass - PostCSS 预设环境 alpha 十六进制颜色不适用于 sass 变量
- php - 如何仅选择文件夹中的 jpg 文件并在 html 上显示
- visual-studio - Windows 8 上的 Visual Studio 2015 社区设置失败
- silverlight - 在 Silverlight 之类的 Web 浏览器上运行 UWP?
- angular - 当我尝试创建项目并运行 Angular 6 时,出现错误
- ios - XCODE - 在项目编辑器中为“调试”构建配置选择配置文件
- java - 更改/增加方法内的while循环条件的值 - 好或坏 -
- java - Liferay 7:如何在 Liferay 7 中创建自定义电子邮件模板?
- mysql - MYSQL 8.0 SELECT COUNT * 查询有什么问题?
- php - 带有 JSON 主体的 HTTP GET 请求是否有大小限制?