使用单表继承时,Doctrine无法生成架构?

时间:2014-01-02 15:15:08

标签: php symfony inheritance doctrine-orm

一个有趣的问题。我正在使用Symfony 2构建一个应用程序,我正在尝试让Doctrine从我的实体类中自动生成我的模式。我有两个实体类InvoiceCreditNoteCreditNote延伸Invoice。它们看起来像这样 -

Invoice.php -

namespace My\Bundle\BillingBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="invoice")
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="discriminator", type="string")
 * @ORM\DiscriminatorMap({"invoice" = "Invoice", "credit_note" = "CreditNote"})
 */
class Invoice
{ ... }

和CreditNote.php -

namespace My\Bundle\BillingBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class CreditNote extends Invoice
{ ... }

......所有这些似乎都遵循了Doctrine对http://docs.doctrine-project.org/en/2.0.x/reference/inheritance-mapping.html#single-table-inheritance单表继承的指导。

但是,当我尝试运行php app/console doctrine:database:create以生成我的架构时,我收到了错误 -

PHP Fatal error:  Cannot redeclare class My\Bundle\BillingBundle\Entity\Invoice in <my-app>/src/My/Bundle/BillingBundle/Entity/Invoice.php on line 15

这表明Invoice类已经被声明(但实际上没有)。更有趣的是,如果我将Invoice类重命名为AInvoice(即字母表中CreditNote之前的内容,那么一切正常。

所以,它似乎就像生成器正在加载CreditNote.php,找到一个扩展Invoice然后加载Invoice.php的类,然后找到{{ 1}}再次文件并尝试再次解析它。只有那个人似乎已经解决了这个问题。

有什么想法?感谢。

2 个答案:

答案 0 :(得分:2)

它是100%正常工作的代码 - 我只是尝试了

您可能只需要使用以下方法清理缓存:

php app/console cache:clear && php app/console cache:clear --env=prod

但我使用php app / console doctrine:schema:update(not doctrine:database:create)

答案 1 :(得分:0)

当我遇到这个问题时,我在下一个路径中添加并修改了带有新寄存器的文件:Resources / config / doctrine /(EntityName.orm.yml)