2013-10-28 58 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的模式工具命令。 –