Php 信条可以';当使用单表继承时,是否不生成模式?

Php 信条可以';当使用单表继承时,是否不生成模式?,php,symfony,inheritance,doctrine-orm,Php,Symfony,Inheritance,Doctrine Orm,一个有趣的问题。我正在使用Symfony 2构建一个应用程序,我正在尝试让Doctrine从我的实体类自动生成我的模式。我有两个实体类,Invoice和CreditNote贷项说明扩展发票。它们看起来像这样- Invoice.php- namespace My\Bundle\BillingBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="invoice") * @OR

一个有趣的问题。我正在使用Symfony 2构建一个应用程序,我正在尝试让Doctrine从我的实体类自动生成我的模式。我有两个实体类,
Invoice
CreditNote
<代码>贷项说明扩展
发票
。它们看起来像这样-

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
{ ... }
…所有这些似乎都遵循了单表继承理论的指导原则

但是,当我试图运行
php应用程序/控制台原则:数据库:创建
以生成我的模式时,我得到了错误-

PHP Fatal error:  Cannot redeclare class My\Bundle\BillingBundle\Entity\Invoice in <my-app>/src/My/Bundle/BillingBundle/Entity/Invoice.php on line 15
PHP致命错误:无法在第15行的/src/My/Bundle/BillingBundle/Entity/Invoice.PHP中重新声明类My\Bundle\BillingBundle\Entity\Invoice
这表明,
Invoice
类已经声明(但事实上还没有)。更有趣的是,如果我将
Invoice
类重命名为
AInvoice
(即字母表中
CreditNote
之前的内容),那么一切都正常

因此,生成器似乎正在加载
CreditNote.php
,找到一个扩展了
Invoice
的类,然后加载
Invoice.php
,然后再次找到
Invoice.php
文件并尝试第二次解析它。只是现在似乎有人已经解决了这类问题


有什么想法吗?谢谢。

这是100%的工作代码-我刚刚试过

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

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

但是我使用php应用程序/控制台原则:模式:更新(不是原则:数据库:创建)

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

太棒了,谢谢!清除缓存修复了它。我刚刚运行了
php应用程序/控制台条令:缓存:清除元数据
,并重试了一次。我很惊讶文档中没有提到这一点。我没有意识到条令控制台命令依赖于缓存。感谢提供的信息。我也有同样的问题,但这个解决方案对我来说不起作用e:(如果我只使用
vendor/bin/doctrine
cli工具,有没有人能建议一下这是否会解决任何问题?我有一个类似的错误,但我尝试过清除一些缓存,没有任何区别