Doctrine Schema错误

时间:2013-10-28 18:12:43

标签: symfony doctrine-orm

我在我的应用中添加了一个新的捆绑包和实体。我创建了一个User.orm.xml文件,并从命令行成功生成了该实体。现在我想在我的数据库中创建另外的表。

当我跑步时:

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

我收到错误。这引出了两个问题:

1)创建一个表的语法是什么,只是新的用户实体?

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)  

两个表,“报告”和“报告列”是相关的。在Entity / reportcolumn.php中,它被注释为,但我没有在最初创建db的orm文件中反映它:

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

1 个答案:

答案 0 :(得分:1)

一些事情

  1. 您不应同时需要@ORM\JoinCoumns注释和@ORM\JoinColumn注释 - 只需@ORM\JoinColumn就够了
  2. 你做了某事使它(架构工具)认为你改变了report.id,因为它在该列上运行ALTER语句
  3. SQL错误看起来就像你得到两个外键列不匹配的那种(即一个是NULL但另一个是NOT NULL,或者一个是INT,另一个是BIGINT)。这不是一个明确的观点,但仍有待检查。您可以运行SHOW CREATE TABLE report并比较id列的定义来进行检查。
  4. Doctrine / Symfony将把报告实体itsef存储在关联的属性上,而不是id,所以我将Entity::$reportid重命名为Entity::$report