2017-05-27 61 views
0

我有以下实体:学说添加现有的外键模式时更新(MySQL的)

a.php只会

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Table(name="a") 
* @ORM\Entity() 
*/ 
class A 
{ 
    /** 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * One Cart has One Customer. 
    * @ORM\OneToOne(targetEntity="B", inversedBy="a") 
    * @ORM\JoinColumn(name="b_id", referencedColumnName="id") 
    */ 
    private $b; 

    /** 
    * @ORM\OneToOne(targetEntity="C", inversedBy="a") 
    * @ORM\JoinColumn(name="c_id", referencedColumnName="id") 
    */ 
    private $c; 

    /** 
    * @ORM\ManyToOne(targetEntity="D", inversedBy="a") 
    * @ORM\JoinColumn(name="d_id", referencedColumnName="id") 
    */ 
    private $d; 
} 

B.php

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Table(name="b") 
* @ORM\Entity() 
*/ 
class B 
{ 
    /** 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\OneToOne(targetEntity="A", mappedBy="b") 
    */ 
    private $a; 
} 

C.php

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Table(name="c") 
* @ORM\Entity() 
*/ 
class C 
{ 
    /** 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\OneToOne(targetEntity="A", mappedBy="c") 
    */ 
    private $a; 
} 

D.php

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Table(name="d") 
* @ORM\Entity() 
*/ 
class D 
{ 
    /** 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\OneToMany(targetEntity="A", mappedBy="d") 
    */ 
    private $a; 
} 

我执行命令:

php bin/console doctrine:database:create 
php bin/console doctrine:schema:update --force 
php bin/console doctrine:schema:update --dump-sql 

最后命令打印:

ALTER TABLE a ADD CONSTRAINT FK_E8B7BE43296BFCB6 FOREIGN KEY (b_id) REFERENCES b (id); 

但这种约束之前添加,所以我不能用

php bin/console doctrine:schema:update --force 

两次没有错误。

只有当我使用MySQL时才会出现此行为。当我删除MySQL并安装MariaDB问题消失。

我应该在我的实体中引入更改吗,还是它是教条的错误?

+0

尝试使用postgresql – fcpauldiaz

+0

使用Postgresql,此示例代码可正常工作。问题仅限于MySQL。 – Daniel

+0

你有什么异常? – fcpauldiaz

回答

1

这似乎是一个错误。尝试使用DoctrineMigrations包,以便在应用它们之前控制迁移类。

+0

最后,我将MySQL更改为MariaDB。当然有解决方法 - 使用简单的脚本和grep,但迁移到MariaDB更简单。 – Daniel