2013-10-28 89 views
0

我已經爲我的應用程序添加了一個新的包和實體。我創建了一個User.orm.xml文件,並從命令行成功生成了該實體。現在我想在我的數據庫中創建額外的表。學說架構錯誤

當我運行:

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

我得到一個錯誤。這導致我有兩個問題:

1)創建一個表的語法是什麼,只是新的User實體?

2)什麼可能導致下面的錯誤。我沒有更改任何其他orm文件。但是,我確實在實體中手動輸入了一對多關係。可能是相關的:

[Doctrine\DBAL\DBALException]                      
    An exception occurred while executing 'ALTER TABLE report CHANGE id id INT AUTO_INCREMENT NOT NULL':    

    SQLSTATE[HY000]: General error: 1025 Error on rename of './dbname/#sql-7e5_7' to './dbname/report' (errno: 150) 


    [PDOException]                          
dbname SQLSTATE[HY000]: General error: 1025 Error on rename of './dbname/#sql-7e5_7' to './dbname/report' (errno: 150) 

兩個表,「報告」和「reportcolumn」是相關的。在實體/ reportcolumn.php,它annoted但我並沒有在最初創建數據庫的ORM文件反映了它:

/** 
    * @var \Acme\DataBundle\Entity\Report 
    * 
    * @ORM\ManyToOne(targetEntity="Acme\DataBundle\Entity\Report") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="reportid", referencedColumnName="id") 
    * }) 
    */ 
    private $reportid; 
+0

使用[DoctrineMigrationsBundle](http://symfony.com/ doc/current/bundles/DoctrineMigrationsBundle/index.html) – tttony

回答

1

有幾件事情

  1. 你不應該需要無論是@ORM\JoinCoumns註釋和批註@ORM\JoinColumn - 只是@ORM\JoinColumn足夠
  2. 你沒東西使它(Schema工具)認爲,因爲它運行在T A ALTER聲明你改變report.id帽子列
  3. 這SQL錯誤看起來像你會得到兩個外鍵列不匹配的種類(即,一個是NULL但對方NOT NULL,或一個是INT,另一個是BIGINT)。這不是一個明確的觀點,但是需要檢查。您可以運行SHOW CREATE TABLE report並比較id列的定義進行檢查。
  4. 主義/ Symfony的是要報告實體itsef存儲在關聯的屬性,而不是ID,所以我改名Entity::$reportid只是Entity::$report
+0

我正在使用sequelpro管理我的數據庫。這就是我定義關係的地方。刪除該級別的關係允許教條命令起作用。而且,我的查詢仍會返回預期的數據。我是一個新手。也許我誤解了教義的功能。這種關係只需要存在於實體層面? – manisha

+0

您應該使用doctrine的模式工具*或*另一個程序(如sequelpro)創建/修改您的模式 - 而不是兩者。如果你用sequelpro直接編輯你的模式,你不需要運行doctrine的模式工具命令。 –