2017-05-27 54 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