2016-10-06 22 views
0

我想在第三方包中的實體中添加一個屬性。這是我的YML文件Symfony2和Doctrine - 添加一個屬性不會繼承自定義包中的父級關聯屬性

Acme\Bundle\AppBundle\Entity\Group: 
type: entity 
table: pim_catalog_group_new 
changeTrackingPolicy: DEFERRED_EXPLICIT 
fields: 
    sortOrder: 
     type: integer   
manyToOne: 
    family: 
     targetEntity: Pim\Component\Catalog\Model\FamilyInterface 
     joinColumn: 
      name: family_id 
      referencedColumnName: id 
      onDelete: 'SET NULL' 

當我運行以下命令

php app/console doctrine:migrations:diff 

它給我id, family_id, sortOrder, code等簡單的字段,但不包括從父類關聯的領域。這裏是產生遷移腳本(請注意,一對多,從母公司聯想多對多字段丟失):

public function up(Schema $schema) 
{ 
    // this up() migration is auto-generated, please modify it to your needs 
    $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); 

    $this->addSql('CREATE TABLE pim_catalog_group (id INT AUTO_INCREMENT NOT NULL, family_id INT DEFAULT NULL, code VARCHAR(100) NOT NULL, sortOrder INT NOT NULL, UNIQUE INDEX UNIQ_3196D4CB77153098 (code), INDEX IDX_3196D4CBC35E566A (family_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'); 
    $this->addSql('ALTER TABLE pim_catalog_group ADD CONSTRAINT FK_3196D4CBC35E566A FOREIGN KEY (family_id) REFERENCES pim_catalog_family (id) ON DELETE SET NULL'); 
    $this->addSql('ALTER TABLE pim_catalog_group_translation DROP FOREIGN KEY FK_622D98DB7E366551'); 
    $this->addSql('ALTER TABLE pim_catalog_group_translation ADD CONSTRAINT FK_622D98DB7E366551 FOREIGN KEY (foreign_key) REFERENCES pim_catalog_group (id) ON DELETE CASCADE'); 
    $this->addSql('ALTER TABLE pim_catalog_association_group DROP FOREIGN KEY FK_E91414DDFE54D947'); 
    $this->addSql('ALTER TABLE pim_catalog_association_group ADD CONSTRAINT FK_E91414DDFE54D947 FOREIGN KEY (group_id) REFERENCES pim_catalog_group (id) ON DELETE CASCADE'); 
    $this->addSql('ALTER TABLE pim_catalog_group_product DROP FOREIGN KEY FK_7AC0C83AFE54D947'); 
    $this->addSql('ALTER TABLE pim_catalog_group_product ADD CONSTRAINT FK_7AC0C83AFE54D947 FOREIGN KEY (group_id) REFERENCES pim_catalog_group (id) ON DELETE CASCADE'); 
} 
+1

只要PHP繼承不是使用超類或相關映射進行映射,它在Doctrine中將不起作用。特別是一旦配置格式(yml,annotation,xml)混合在一起,這將是艱難的,因此最簡單的方法就是覆蓋整個實體。另請參閱:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html – Rvanlaak

回答

0

按@Rvanlaak建議:

PHP繼承不會學說工作,只要他們沒有使用超類或相關映射。特別是一旦配置格式(yml,annotation,xml)混合在一起,這將是艱難的,因此最簡單的方法就是覆蓋整個實體。另請參閱:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html

我結束了複製整個ORM文件到我的自定義捆綁和修改它來添加我的自定義字段和協會解決這一問題。

+1

嗨,正確的購買Akeneo有一個系統,允許你做到這一點,而不需要複製整個文件。如果您願意,甚至可以繼續使用默認表格。請查看他們的文檔,以便在產品中執行此操作:https://docs.akeneo.com/latest/cookbook/catalog_structure/overriding_the_orm_product_value.html分組應該完全相同。 –