Php Doctrine2继承-1452:完整性约束冲突
我在新服务器上部署了projet,当我尝试插入具有继承性的类时,出现错误“SQLSTATE[23000]:完整性约束冲突:1452无法添加或更新子行:外键约束失败”:Php Doctrine2继承-1452:完整性约束冲突,php,inheritance,symfony,doctrine-orm,mysql-error-1452,Php,Inheritance,Symfony,Doctrine Orm,Mysql Error 1452,我在新服务器上部署了projet,当我尝试插入具有继承性的类时,出现错误“SQLSTATE[23000]:完整性约束冲突:1452无法添加或更新子行:外键约束失败”: /** * @ORM\Table(name="prosante") * @ORM\Entity */ class ProSante extends Base { /** * @ORM\Column(type="string") */ protected $firstName; }
/**
* @ORM\Table(name="prosante")
* @ORM\Entity
*/
class ProSante extends Base
{
/**
* @ORM\Column(type="string")
*/
protected $firstName;
}
/**
* @ORM\Table(name="base")
* @ORM\Entity(repositoryClass="Test\MyBundle\Entity\BaseRepository")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({"base" = "Base",
* "prosante" = "ProSante",
* "pharmacie" = "Pharmacie"})
*/
abstract class Base
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
}
日志:
我不知道该怎么办,因为当我在本地主机上执行相同的插入操作时,错误不会出现
编辑
在手动向我的数据库中插入一个新的“Base”之后,我选中“SELECT LAST_INSERT_ID()”,它不会返回0,我不明白
解决方案这是一个驱动程序问题,我更改了它,它就工作了。看来条令正在将“Base”解释为它自己的表。我认为您希望在这里实现的是将基类作为映射的超类 为此,只需将其注释为: @映射超类 然后您可以安全地将其扩展到其他实体中
看来,条令正在将“基础”解释为它自己的表格。我认为您希望在这里实现的是将基类作为映射的超类 为此,只需将其注释为: @映射超类 然后您可以安全地将其扩展到其他实体中
我遇到了一个类似的问题,并花了大量时间寻找其原因,因此我允许自己在这里分享我的解决方案,因为这是我在so上发现的最接近的问题。希望这能帮助一些人:) 就我而言 尽管第一个查询(对于基类)中自动生成的密钥已成功传递给第二个查询(对于子类),但条令仍引发了相同的外键约束冲突异常。第二个查询仍然失败,违反了此约束,事务被回滚 深入查看日志(我在CentOS上使用MariaDB),发现以下错误:
[ERROR]未为MariaDB 2PC注册事务,但事务处于活动状态
我的解决方案
结果证明我的MariaDB服务安装或更新不正确(我不知道确切情况,是别人做的)
运行解决了我的问题。我遇到了一个类似的问题,并花了大量时间寻找其原因,因此我允许自己在这里分享我的解决方案,因为这是我在so上发现的最接近的问题。希望这能帮助一些人:) 就我而言 尽管第一个查询(对于基类)中自动生成的密钥已成功传递给第二个查询(对于子类),但条令仍引发了相同的外键约束冲突异常。第二个查询仍然失败,违反了此约束,事务被回滚 深入查看日志(我在CentOS上使用MariaDB),发现以下错误:
[ERROR]未为MariaDB 2PC注册事务,但事务处于活动状态
我的解决方案
结果证明我的MariaDB服务安装或更新不正确(我不知道确切情况,是别人做的)
运行解决了我的问题。我希望条令将interpert Base作为自己的表,因为我使用了“类表继承”:但在插入时失败了,我看到了,请查看这些实体的“show create table”,看看您是否能解出放置的外键约束,以及它们为什么会在那里。抱歉,我帮不上什么忙。好吧,谢谢,但外键约束似乎没问题,但日志很奇怪,就像doctrine不知道最后一个id插入。我希望doctrine插入Base作为自己的表,因为我使用了“类表继承”:但在插入时失败,我看到了,请看“显示创建表”对于这些实体,查看是否可以计算出放置的外键约束,以及它们为什么会存在。对不起,我帮不上忙了。好的,谢谢,但外键约束似乎没问题,但日志很奇怪,好像条令不知道最后一个id插入。你能解释一下问题吗?我遇到了同样的问题。你能解释一下这个问题吗?我遇到了同样的事情。
[2012-06-11 15:42:46] doctrine.DEBUG: INSERT INTO base (name) VALUES (?) ({"1":"Blabla"}) [] []
[2012-06-11 15:42:46] doctrine.DEBUG: INSERT INTO prosante (id, firstname) VALUES (?, ?) ({"1":"0","2":"PATRICK"}) [] []