gpt4 book ai didi

php - Doctrine 不会在 Mysql 中保留具有 bool 值和 PDO::ATTR_EMULATE_PREPARES = false 的实体

转载 作者:可可西里 更新时间:2023-11-01 06:29:20 35 4
gpt4 key购买 nike

我们正在使用 Symfony 创建一些网络服务。我们使用 Doctrine-ORM 来存储实体,使用 Doctrine-DBAL 来检索数据,因为它非常轻量并且可以重用 ORM(实体管理器)连接。

当使用 Doctrine-DBAL 时,整数值作为字符串返回给 PHP,我们希望有整数值,特别是因为它们被返回到 Javascript。在讨论之后 How to get numeric types from MySQL using PDO?我们已经安装了 mysql native 驱动程序 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 存储具有 bool 值的实体时,实体不会被持久化。我们在日志中看到 INSERT 和 COMMIT,但记录不在数据库中(如果我们使用实体中没有定义 bool 字段的表,则记录被存储)。

此外,我们没有得到任何错误或异常,因此我们发现这非常危险。我们认为 PDO 库中存在错误,但我们必须对其进行更多研究。

问题:有人经历过这种行为吗?任何解决方法? Doctrine 应该考虑这个吗?

最佳答案

gseric 的 answer会起作用,但会产生用整数给你的实体补水的效果。为了在你的实体中仍然得到 bool 值,你可以简单地扩展 Doctrine 的 BooleanType:

class BooleanToIntType extends \Doctrine\DBAL\Types\BooleanType
{
public function getBindingType()
{
return \PDO::PARAM_INT;
}
}

然后,在您的应用程序 Bootstrap 中:

\Doctrine\DBAL\Types\Type::overrideType('boolean', BooleanToIntType::class);

关于php - Doctrine 不会在 Mysql 中保留具有 bool 值和 PDO::ATTR_EMULATE_PREPARES = false 的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31089893/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com