# Customer Entity Extension mit Scalar Values möglich, aber wie?

**URL:** https://forum.shopware.com/t/customer-entity-extension-mit-scalar-values-moeglich-aber-wie/86838
**Category:** Programmierung
**Tags:** programming
**Created:** [13. April 2021 um 12:10 UTC](https://forum.shopware.com/t/customer-entity-extension-mit-scalar-values-moeglich-aber-wie/86838 "2021-04-13T12:10:14Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![benjamin.kozlowski](https://avatars.discourse-cdn.com/v4/letter/b/c68b51/32.png) [@benjamin.kozlowski](https://forum.shopware.com/u/benjamin.kozlowski)
#### Post date: [13. April 2021 um 12:10 UTC](https://forum.shopware.com/t/customer-entity-extension-mit-scalar-values-moeglich-aber-wie/86838/1 "2021-04-13T12:10:14Z")

</div>

Hi zusammen,

ich möchte gerne in der Customer Tabelle ein neues Feld anlegen, die die Anzahl der Anmeldungen loggt.

Die Custom Fields sorgen mir für zuviel Overhead und eine Entity Extension mit einer eigenen Tabelle sorgt auch wieder für unnütze Joins.

Laut Shopware Doku ist es möglich einer Entity Extension auch Scalar Values mitzugeben. Ich hab also versucht, ein IntField an den Customer zu hängen

```
class CustomerExtension extends EntityExtension
{
    public function extendFields(FieldCollection $collection): void
    {
        $collection->add(
           (new IntField('amount_login', 'amountLogin',null,null))
        );

    }

    public function getDefinitionClass(): string
    {
        return CustomerDefinition::class;
    }
}

```

Nun kriege ich aber eine Exception, die mir sagt: „Only AssociationFields, FkFields/ReferenceVersionFields for a ManyToOneAssociationField or fields flagged as Runtime can be added as Extension.“

In der Shopware-Doku finde ich nichts dazu, was da genau möglich ist und was nicht. In der [Doku](https://developer.shopware.com/docs/guides/plugins/plugins/framework/data-handling/add-complex-data-to-existing-entities#entity-extension-vs-custom-fields) steht nur, dass es prinzipiell möglich ist.

Sind Scalar Values als Entity Extension nur als Runtime-Flag möglich? Und wenn ich das richtig sehe, müsste ich mich bei einem Runtime-Flag dann über einen Subscriber darum kümmern, dass das Feld an das Customer Objekt gehängt wird? Und um die Migration müsste ich dann auch selbst kümmern mit einem „ALTER TABLE ADD…“?

Vielen Dank für die Hilfe!!

LG Ben

---

<div class="post-metadata">

### Author: ![openmindculture](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/openmindculture/32/8658_2.png) [@openmindculture](https://forum.shopware.com/u/openmindculture)
#### Post date: [27. Februar 2024 um 09:35 UTC](https://forum.shopware.com/t/customer-entity-extension-mit-scalar-values-moeglich-aber-wie/86838/2 "2024-02-27T09:35:03Z")

</div>

Späte Antwort, aber ich hatte ein ähnliches Problem: Produkte sollen mehrere zusätzliche Felder/Eigenschaften für prozentuale Werte bekommen, also einfache, skalare Integer-Felder.

Die Dokumentation ist leider auch drei Jahre später immer noch recht knapp gehalten und geht nicht auf solche Details ein. An anderer Stelle steht, es ginge auch mit JSON, sofern nur skalare Werte benötigt werden. Dort war mir wiederum unklar, ob sich auch bestehende Core Entitities wie Produkte auf diese Weise programmatisch erweitern lassen, oder ob das nur per Admin UI oder API Endpoint möglich ist.

Wie lautet die Lösung bzw. was ist die Best Practice? Vermutlich so: in der Plugin-Klasse die Lifecycle-Methode `install` implementieren und dort ein `customFieldSetRepository` kreieren, das die gewünschten Skalare beschreibt. Etwa so wie folgt.

```auto
    public function install(InstallContext $installContext): void
    {
        parent::install($installContext);

        $customFieldSetRepository = $this->container->get('custom_field_set.repository');

        $customFieldSetRepository->create([
            [
                'name' => 'ingos_example_custom_field_set',
                'config' => [
                    'label' => [
                        'de-DE' => 'Kostenfaktoren',
                        'en-GB' => 'Cost Factors',
                        Defaults::LANGUAGE_SYSTEM => 'Cost Factors',
                    ]
                ],
                'customFields' => [
                    [
                        'name' => 'ingos_example_percentage_01',
                        'type' => CustomFieldTypes::INT,
                        'config' => [
                            'label' => [
                                'de-DE' => 'Kostenfaktor 1 Prozentsatz',
                                'en-GB' => 'cost factor 1 percentage',
                                Defaults::LANGUAGE_SYSTEM => 'cost factor 1 percentage',
                            ],
                            'type' => 'number',
                            'numberType' => 'int',
                            'customFieldType' => 'number',
                            'step' => 1,
                            'min' => 0,
                            'max' => 100,
                            'customFieldPosition' => 1,
                        ],
                        'active' => true,
                    ],
                ],
                'relations' => [
                    [
                        'entityName' => 'product',
                    ],
                ],
            ],
        ], $installContext->getContext());
    }
}

```

Quellen: Shopware Doku, diverse Blogs, StackOverflow und dieser hilfreiche Forenbeitrag:

> [@CustomFields für existierende Entity erstellen](https://forum.shopware.com/t/customfields-fuer-existierende-entity-erstellen/65514):
>
> Hallo, ich versuche einer existierenden Entity programmatisch CustomFields zuzuweisen. Ich habe schon herausgefunden, wie ich der Entity beim Speichern das customFields-Objekt mitgebe. Nun muss ich noch die Felddefinitionen erstellen, damit diese&nbsp;beim Speichern auch&nbsp;wirkllich zu Verfügung stehen und die Daten nicht ins Leere laufen. Das habe ich in der Doku dazu gefunden:&nbsp;[https://docs.shopware.com/en/shopware-platform-dev-en/internals/core/data-abstraction-layer/custom-field](https://docs.shopware.com/en/shopware-platform-dev-en/internals/core/data-abstraction-layer/custom-field) $customFieldSetRep…

---

<div class="post-metadata">

### Author: ![tomtomd](https://avatars.discourse-cdn.com/v4/letter/t/848f3c/32.png) [@tomtomd](https://forum.shopware.com/u/tomtomd)
#### Post date: [27. Februar 2024 um 17:15 UTC](https://forum.shopware.com/t/customer-entity-extension-mit-scalar-values-moeglich-aber-wie/86838/3 "2024-02-27T17:15:11Z")

</div>

Es gibt grundsätzlich drei Möglichkeiten neue Felder an Entities zu hängen:

- Custom Fields (manuell über das Admin oder über Plugin-Installation)
- Entity Extensions mit eigener Tabelle und FK-Verknüpfung =\> [Adding Complex Data to Existing Entities | Shopware Documentation](https://developer.shopware.com/docs/guides/plugins/plugins/framework/data-handling/add-complex-data-to-existing-entities.html#adding-a-field-with-a-database)
- Entity Extensions ohne Tabelle zur Laufzeit (Runtime Flag) =\> [https://developer.shopware.com/docs/guides/plugins/plugins/framework/data-handling/add-complex-data-to-existing-entities.html#adding-a-field-without-a-database](https://developer.shopware.com/docs/guides/plugins/plugins/framework/data-handling/add-complex-data-to-existing-entities.html#adding-a-field-without-a-database)

Man könnte theoretisch auch direkt Anpassungen an einer Tabelle vornehmen, mit Plain SQL arbeiten und das Feld dann mit einer Runtime Entity Extensions über Plain SQL lesen und befüllen. Davon ist aber wegen Updatefähigkeit etc. abzuraten.
