Ich versuche gerade ein vererbbares Boolean-Feld für Produkte einzubauen aber irgendwie funktioniert das nicht. Wenn das Plugin aktiviert ist bekomme ich vom Backend immer den Fehler
SQLSTATE[42S22]: Column not found: 1054 Unknown column ‚product.customizationExtension.parent_id‘ in ‚field list‘
Das ist meine Entity:
class ProductCustomizationEntity extends Entity
{
use EntityIdTrait;
public const ENTITY_NAME = 'maxim_customization_extension';
public function getEntityName(): string
{
return self::ENTITY_NAME;
}
public function getEntityClass(): string
{
return ExampleEntity::class;
}
protected function defineFields(): FieldCollection
{
return new FieldCollection([
(new IdField('id', 'id'))->addFlags(new Required(), new PrimaryKey()),
new FkField('product_id', 'productId', ProductDefinition::class),
(new BoolField('is_customizable', 'isCustomizable'))->addFlags(new Inherited()),
new CreatedAtField(),
new UpdatedAtField(),
new OneToOneAssociationField('product', 'product_id', 'id', ProductDefinition::class, false),
new ParentFkField(self::class),
new ParentAssociationField(self::class, 'id'),
new ChildrenAssociationField(self::class),
]);
}
und eine Extension-Klasse:
class CustomizationExtension extends EntityExtension
{
public const EXTENSION_NAME = 'customizationExtension';
public function extendFields(FieldCollection $collection): void
{
$collection->add(
(new OneToOneAssociationField(self::EXTENSION_NAME, 'id', 'product_id', CustomizationExtensionDefinition::class, true))
->addFlags(new Inherited())
);
}
public function getDefinitionClass(): string
{
return ProductDefinition::class;
}
}
und diese Migration:
class Migration1625938165Initial extends MigrationStep
{
use InheritanceUpdaterTrait;
public function getCreationTimestamp(): int
{
return 1625938165;
}
public function update(Connection $connection): void
{
// `is_customizable` BOOLEAN NULL,
$query = <<<SQL
CREATE TABLE IF NOT EXISTS `maxim_customization_extension` (
`id` INT NOT NULL,
`product_id` INT NULL,
`created_at` DATETIME(3) NOT NULL,
`updated_at` DATETIME(3),
PRIMARY KEY (id)
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci;
SQL;
$connection->executeStatement($query);
$this->updateInheritance($connection, 'maxim_customization_extension', 'is_customizable');
}
Das boolean Feld wird im Query jetzt nicht eingetragen weil ich in der updateInheritance Anweisung immer den Fehler erhalten habe, dass die Spalte schon existiert.