2016-10-06 5 views
0

第三者バンドルのエンティティにプロパティを追加しようとしています。私は、次のコマンドSymfony2とDoctrine - プロパティを追加してもカスタムバンドルの親結合プロパティが継承されない

php app/console doctrine:migrations:diff 

を実行すると、ここに私のYMLファイルが

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' 

であるそれは私にid, family_id, sortOrder, codeを与え、親クラスから他の単純なフィールドが、連想フィールドが含まれていません。ここで生産移行スクリプトは、(親からoneToMany、多対多の連想フィールドが不足していることに注意してください)です。

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、注釈、xml)が混在すると、これは難しくなります。そのため、エンティティ全体をオーバーライドするのが最も簡単です。また、参照してください:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html – Rvanlaak

答えて

0

@Rvanlaak提案を1として:

PHPの継承は、彼ら限り教義では動作しません。スーパークラスまたは関連するものを使用してマップされていません。特に設定書式(yml、注釈、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それはグループ化のために全く同じでなければなりません。 –

関連する問題