我们正在使用 Symfony 来创建一些 Web 服务。我们使用 Doctrine-ORM 来存储实体,使用 Doctrine-DBAL 来检索数据,因为它非常轻,并且可以重用 ORM(实体管理器)连接。
当使用 Doctrine-DBAL 时,整数值作为字符串返回给 PHP,我们希望有整数值,特别是因为它们返回给 Javascript。经过这次讨论如何使用 PDO 从 MySQL 获取数字类型?我们已经安装了mysql本机驱动sudo apt-get install php5-mysqlnd
并使用 PDO::ATTR_EMULATE_PREPARE = false 设置我们的 symfony (dbal) 配置:
doctrine:
dbal:
.
.
options:
20 : false # PDO::ATTR_EMULATE_PREPARES is 20
通过此配置,当 mysql 字段为整数时,我们将获取整数。到目前为止,一切都很好。
但是有一个新问题:当通过 Doctrine-ORM 存储具有布尔值的实体时,实体不会被持久化。我们在日志中看到 INSERT 和 COMMIT,但记录不在数据库中(如果我们使用实体中没有定义布尔字段的表,则会存储记录)。
此外,我们没有收到任何错误或异常,因此我们发现这非常危险。我们认为 PDO 库中存在错误,但我们必须进一步研究它。
问题:有人经历过这种行为吗?有什么解决方法吗?教义应该解释这一点吗?
格塞里克的answer会起作用,但会产生用整数水合实体的效果。为了仍然在你的实体中获得布尔值,你可以简单地扩展 Doctrine 的BooleanType
:
class BooleanToIntType extends \Doctrine\DBAL\Types\BooleanType
{
public function getBindingType()
{
return \PDO::PARAM_INT;
}
}
然后,在您的应用程序引导程序中:
\Doctrine\DBAL\Types\Type::overrideType('boolean', BooleanToIntType::class);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)