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