Hallo,
irgendwie bin ich nicht allein mit meinem Verständissproblem bezüglich der Erweiterung einer Core-Entity. Und ich finde keine Lösung. Als Tutorial nutze ich das How To BundleExample
Also, ich habe eine Entität MyProduct , welches das eine Erweiterung der Product-Entität ist und zusätzliche Felder/Eigenschaften hat.
Die Migration-Datei für MyProduct:
...
class Migration1596974074MyProduct extends MigrationStep
{
use InheritanceUpdaterTrait;
...
public function update(Connection $connection): void
{
$connection->executeUpdate('
CREATE TABLE IF NOT EXISTS `my_product` (
`id_campaign` BINARY(16) NOT NULL,
`product_id` BINARY(16) NOT NULL,
`product_version_id` BINARY(16) NOT NULL,
`name` VARCHAR(255) NULL COMMENT "specific product name for this campaign",
`created_at` DATETIME(3) NOT NULL,
PRIMARY KEY (`id_campaign`, `product_id`, `product_version_id`),
CONSTRAINT `fk.my_product.id_campaign` FOREIGN KEY (`id_campaign`)
REFERENCES `my_campaign` (`id`),
CONSTRAINT `fk.my_product.product_id` FOREIGN KEY (`product_id`)
REFERENCES `product` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
');
$this->updateInheritance($connection, 'product', 'my_campaigns');
}
...
}
Dazu gibt es die MyProductDefinition.php
class LiveshoppingProductDefinition extends MappingEntityDefinition
{
public function getEntityName(): string
{
return 'my_product';
}
protected function defineFields(): FieldCollection
{
return new FieldCollection([
// gekürzt: FK-Fields für id_campaign, product_id, product_version_id
...
(new StringField('name', 'name')),
// gekürzt: ManyToMnayAssociationFields
...
]);
}
}
Und die ProductExtension.php
...
public function getDefinitionClass(): string
{
return ProductDefinition::class;
}
public function extendFields(FieldCollection $collection): void
{
$collection->add(
(new ManyToManyAssociationField(
...
))->addFlags(new Inherited())
);
}
In meinem Modul gibt es ein Formular, wo die Eigenschaften bearbeitet werden sollen. Den orginalen Produktname product.name kann ich ausgeben, wie aber komme ich beispielsweise an my_product.name? Also wie komme ich an die MyProduct-Entität? Muß da eine weitere Entität erstellt werden?
Das Beispiel BundleExample speichert ja nur Daten, welche schon vorhanden sind. Was ist mit den neuen, zusätzlichen und zu administrierenden Feldern?