0

我在我的应用程序中添加了一个新的包和实体。我创建了一个 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)  

“report”和“reportcolumn”这两个表是相关的。在 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;
4

1 回答 1

1

一些东西

  1. 您不应该同时需要@ORM\JoinCoumns注释和@ORM\JoinColumn注释 - 就@ORM\JoinColumn足够了
  2. 你做了一些事情让它(模式工具)认为你改变了,因为它在那个列上report.id运行了一个语句ALTER
  3. 该 SQL 错误看起来像您将得到两个外键列不匹配的那种(即,一个是NULL但另一个是NOT NULL,或者一个是INT,另一个是BIGINT)。这不是一个确定的点,但仍然需要检查。您可以通过运行 aSHOW CREATE TABLE report并比较列的定义来进行检查id
  4. Doctrine/Symfony 会将 Report 实体 itsef 存储在关联的属性上,而不是 id 上,所以我将重命名Entity::$reportidEntity::$report
于 2013-10-28T21:33:15.047 回答