Php 信条可以';当使用单表继承时,是否不生成模式?
一个有趣的问题。我正在使用Symfony 2构建一个应用程序,我正在尝试让Doctrine从我的实体类自动生成我的模式。我有两个实体类,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
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工具,有没有人能建议一下这是否会解决任何问题?我有一个类似的错误,但我尝试过清除一些缓存,没有任何区别