一个有趣的问题。我正在使用Symfony 2构建一个应用程序,我正在尝试让Doctrine从我的实体类中自动生成我的模式。我有两个实体类Invoice
和CreditNote
。 CreditNote
延伸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}}再次文件并尝试再次解析它。只有那个人似乎已经解决了这个问题。
有什么想法?感谢。
答案 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)