Php Doctrine2继承-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; }

我在新服务器上部署了projet,当我尝试插入具有继承性的类时,出现错误“SQLSTATE[23000]:完整性约束冲突:1452无法添加或更新子行:外键约束失败”:

/**
 * @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"}) [] []