2017-06-06 106 views
0

我只是遇到了Symfony2和Doctrine ORM的一个非常奇怪的问题。它停止在我的一个表中插入数据,在过去的几个月中没有做任何更改,但它开始失败,尽管没有Doctrine异常或任何其他内容,分析器显示插入操作正确。实体接收ID 0并且数据库中没有记录。Symfony2 + Doctrine INSERT查询失败,没有错误

这只是一个基本的persist + flush组合映射实体。是的,实体被映射(也在Profiler中检查)。

我想知道是否有任何情况下,尽管查询没有执行/不成功,Doctrine不会抛出异常?我不知道在哪里寻找它。我确实检查了所有可能的配置。没有例外抛出。这一切看起来都很好,它应该是这样,但数据没有插入。

我曾尝试直接使用命令行执行相同的查询,它工作得很好。

我使用的Symfony 2.8学说版本 2.7.2主义\常见,学说\ ORM - (根据composer.lock)2.5.6

编辑

我刚开始变得非常奇怪的行为从教条到处。很少有查询在从Doctrine ORM执行时不返回任何结果,但直接执行时可以正常工作。

回答

0

我确实解决了这个问题。它与PDO/DBAL和MySQL准备的语句模拟使用PDO::ATTR_EMULATE_PREPARES(你可以阅读它here)。

只需将此选项恢复为真即可解决问题。我不得不调整我依赖于错误的其他代码部分。

只是为了防止有人遇到这种问题,在Symfony2中这是我如何配置它,只需删除选项20以恢复默认值。请记住,任何返回整数的DBAL查询(可能还有其他类型)将返回字符串。

doctrine: 
    dbal: 
     default_connection: default 
     connections: 
      default: 
       driver: pdo_mysql 
       host:  "%database_host%" 
       port:  "%database_port%" 
       dbname: "%database_name%" 
       user:  "%database_user%" 
       password: "%database_password%" 
       charset: UTF8 
       options: 
        20: false // if you have this line and value set to false or 0, just remove it, this option defaults to true