# Plugin: beim Erstellen einer Entity kommt "Expected data to be array"

**URL:** <https://forum.shopware.com/t/plugin-beim-erstellen-einer-entity-kommt-expected-data-to-be-array/71341>\
**Category:** Programmierung\
**Created:** [3. Dezember 2020 um 09:58 UTC](https://forum.shopware.com/t/plugin-beim-erstellen-einer-entity-kommt-expected-data-to-be-array/71341 "2020-12-03T09:58:20Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![Michael86](https://avatars.discourse-cdn.com/v4/letter/m/ee59a6/32.png) [@Michael86](https://forum.shopware.com/u/Michael86)\
**Post date:** [3. Dezember 2020 um 09:58 UTC](https://forum.shopware.com/t/plugin-beim-erstellen-einer-entity-kommt-expected-data-to-be-array/71341/1 "2020-12-03T09:58:20Z")

</div>

Hallo zusammen,

ich habe in einem Plugin eine Entity Device mit einer ManyToMany-Assoziation auf eine andere, eigene&nbsp;Entity ArticleGroup und zwei ManyToOne-Assoziationen auf eine andere eigene Entity Type und auf ProductManufacturer, siehe:

```
class DeviceEntity extends Entity
{
    use EntityIdTrait;

    /**
     * @var string
     */
    protected $deviceId;

    /**
     * @var DateTime
     */
    protected $update;

    /**
     * @var string
     */
    protected $modelNumber;

    /**
     * @var string
     */
    protected $additional;

    /**
     * @var string
     */
    protected $identNumber;

    /**
     * @var ProductManufacturerEntity
     */
    protected $productManufacturer;

    /**
     * @var TypeEntity
     */
    protected $type;

    /**
     * @var ArticleGroupCollection
     */
    protected $articleGroups;

    /**
     * @var int
     */
    protected $active;

...
}

```

Ich habe mein Plugin&nbsp;in Anlehnung an das&nbsp;Tutorial&nbsp;[Shopware 6: Step 1: Introduction](https://docs.shopware.com/en/shopware-platform-dev-en/how-to/indepth-guide-bundle/introduction?category=shopware-platform-dev-en/how-to/indepth-guide-bundle) erstellt, einschließlich der Vue-Komponenten für den Admin-Bereich.

Ich kann Instanzen meiner eigenen primitiven Entities Type und ArticleGroup erstellen (die kommen beide ohne Assoziationen aus), aber wenn ich eine Instanz von Device erstellen möchte, was in folgenden Payload für den&nbsp;POST-Request mündet:

```
{
"productManufacturerId":"112a0ca7de2e42c4866d5f83e9de1c45",
"typeId":"0a94fa60001c49a6a7d4ceb19063c24a",
"deviceId":"ID",
"modelNumber":"12",
"additional":"zusätzlich",
"identNumber":"21",
"articleGroups":[{"id":"37979f2b3eeb4b7db7f5dac75a3fa9a2"}],
"active":1,
"id":"1d31f43561234b428d19c9bf640fcdaa"
}

```

dann kommt ein Bad Request (HTTP-Code 400) mit dem Fehler:

```
{
  "errors": [
     {
        "status":"400",
        "code":"FRAMEWORK__WRITE_MALFORMED_INPUT",
        "title":"Bad Request",
        "detail":"Expected data to be array.",
        "meta":{
          "parameters":[]
        }
     }
  ]
}

```

Leider werde ich aus dieser Fehlermeldung nicht schlau. Hat jemand eine Idee?

Danke!  
Michael

---

<div class="post-metadata">

**Author:** ![Michael86](https://avatars.discourse-cdn.com/v4/letter/m/ee59a6/32.png) [@Michael86](https://forum.shopware.com/u/Michael86)\
**Post date:** [3. Dezember 2020 um 12:57 UTC](https://forum.shopware.com/t/plugin-beim-erstellen-einer-entity-kommt-expected-data-to-be-array/71341/2 "2020-12-03T12:57:28Z")

</div>

Ok, ich habe nach etwas Debugging jetzt gesehen, dass die Api ein Array für den Key „productManufacturer“ erwartet, aber nichts für „productManufacturerId“. Nur leider hat das per Vue generierte Formular bei v-model=„productManufacturer“ statt v-model=„productManufacturerId“ gar nichts für „productManufacturer“ gesendet. Also weiter debuggen…

---

<div class="post-metadata">

**Author:** ![Michael86](https://avatars.discourse-cdn.com/v4/letter/m/ee59a6/32.png) [@Michael86](https://forum.shopware.com/u/Michael86)\
**Post date:** [3. Dezember 2020 um 15:33 UTC](https://forum.shopware.com/t/plugin-beim-erstellen-einer-entity-kommt-expected-data-to-be-array/71341/3 "2020-12-03T15:33:08Z")

</div>

Irgendwie scheint die Api Werte für das Feld „productManufacturer“ zu erwarten, aber senden kann ich lediglich „productManufacturerId“, da in der platform/src/Administration/Resources/app/administration/src/core/data-new/changeset-generator.data.js der Fall für ‚many\_to\_one‘ leer ist.

Meine Formular-Definition sieht wie folgt aus:

```
                {{ device.productManufacturer }}
                
                

                {{ device.type }}

```

und meine Entity-Definition:  
&nbsp;

```
    protected function defineFields(): FieldCollection
    {
        return new FieldCollection([
            (new FkField('product_manufacturer_id', 'productManufacturerId', ProductManufacturerDefinition::class))->addFlags(new Inherited(), new Required()),
            (new ReferenceVersionField(ProductManufacturerDefinition::class))->addFlags(new Inherited(), new Required()),

            (new FkField('type_id', 'typeId', TypeDefinition::class))->addFlags(new Inherited()),
            
            (new IdField('id', 'id'))->addFlags(new PrimaryKey(), new Required()),
            (new StringField('device_id', 'deviceId'))->addFlags(new Required()),
            new DateTimeField('update', 'update'),
            new StringField('model_number', 'modelNumber'),
            new StringField('additional', 'additional'),
            new StringField('ident_number', 'identNumber'),
            (new ManyToOneAssociationField('productManufacturer', 'product_manufacturer_id', ProductManufacturerDefinition::class))->addFlags(new Required()),
            new ManyToOneAssociationField('type', 'type_id', TypeDefinition::class),
            new ManyToManyAssociationField('articleGroups', ArticleGroupDefinition::class, DeviceArticleGroupDefinition::class, 'device_id', 'article_group_id'),
            new IntField('active', 'active', 0, 1)
        ]);
    }

```

Auch sonst sehe ich im Shopware-Code überall, dass sw-entity-single-select immer das v-model auf das entity.andereEntityId statt auf entity.andereEntity verweisen lassen.

Ich habe zum Test mal den Manufacturer bei einem Produkt geändert und da wird im Payload des POST-Api-Requests auch nur&nbsp;{„manufacturerId“:„112a0ca7de2e42c4866d5f83e9de1c45“} gesendet.

Hat jemand eine Idee, warum Shopware für meine Device-Entity&nbsp;ein Array für die ManyToOne-Assoziation erwartet?

---

<div class="post-metadata">

**Author:** ![Michael86](https://avatars.discourse-cdn.com/v4/letter/m/ee59a6/32.png) [@Michael86](https://forum.shopware.com/u/Michael86)\
**Post date:** [10. Dezember 2020 um 14:04 UTC](https://forum.shopware.com/t/plugin-beim-erstellen-einer-entity-kommt-expected-data-to-be-array/71341/4 "2020-12-10T14:04:30Z")

</div>

Ich habe es nach langem Debuggen selbst gefunden:  
1.) habe ich den vierten Parameter&nbsp;‚id‘ in folgendem Statement vergessen

```
new ManyToOneAssociationField('productManufacturer', 'product_manufacturer_id', ProductManufacturerDefinition::class, 'id')

```

2.) habe ich alle Flags&nbsp;

```
new Inherited()

```

entfernt.

Ich hoffe, dass es anderen weiterhilft, die evtl. vor einem ähnlichen Problem stehen.

---

<div class="post-metadata">

**Author:** ![r.allenstein](https://avatars.discourse-cdn.com/v4/letter/r/848f3c/32.png) [@r.allenstein](https://forum.shopware.com/u/r.allenstein)\
**Post date:** [10. Dezember 2020 um 18:44 UTC](https://forum.shopware.com/t/plugin-beim-erstellen-einer-entity-kommt-expected-data-to-be-array/71341/5 "2020-12-10T18:44:47Z")

</div>

Danke, dass du deine Lösung gepostet hast ✌

---

<div class="post-metadata">

**Author:** ![etoile](https://avatars.discourse-cdn.com/v4/letter/e/9de0a6/32.png) [@etoile](https://forum.shopware.com/u/etoile)\
**Post date:** [15. Dezember 2020 um 01:18 UTC](https://forum.shopware.com/t/plugin-beim-erstellen-einer-entity-kommt-expected-data-to-be-array/71341/6 "2020-12-15T01:18:38Z")

</div>

> [@Michael86 schrieb:](https://forum.shopware.com/profile/36616/Michael86 "Michael86")
> 
> Ich habe es nach langem Debuggen selbst gefunden:  
> 1.) habe ich den vierten Parameter&nbsp;‚id‘ in folgendem Statement vergessen
> 
> new ManyToOneAssociationField(‚productManufacturer‘, ‚product\_manufacturer\_id‘, ProductManufacturerDefinition::class, ‚id‘)
> 
> 2.) habe ich alle Flags&nbsp;
> 
> new Inherited()
> 
> entfernt.
> 
> Ich hoffe, dass es anderen weiterhilft, die evtl. vor einem ähnlichen Problem stehen.

Zur Ergänzung, da ich zur Zeit auch&nbsp;damit zu tun habe:

Es lag bei dir aller Wahrscheinlichkeit nach an 2.) und nicht an 1.), da im Konstruktor der&nbsp;Klasse ManyToOneAssociationField bereits&nbsp;\_string $referenceField = ‚id‘&nbsp;\_als Default-Wert des vierten Feldes gesetzt wird.

---

<div class="post-metadata">

**Author:** ![Michael86](https://avatars.discourse-cdn.com/v4/letter/m/ee59a6/32.png) [@Michael86](https://forum.shopware.com/u/Michael86)\
**Post date:** [17. Dezember 2020 um 08:32 UTC](https://forum.shopware.com/t/plugin-beim-erstellen-einer-entity-kommt-expected-data-to-be-array/71341/7 "2020-12-17T08:32:11Z")

</div>

Ja, da hast du recht.

---

<div class="post-metadata">

**Author:** ![Michael86](https://avatars.discourse-cdn.com/v4/letter/m/ee59a6/32.png) [@Michael86](https://forum.shopware.com/u/Michael86)\
**Post date:** [17. Dezember 2020 um 10:52 UTC](https://forum.shopware.com/t/plugin-beim-erstellen-einer-entity-kommt-expected-data-to-be-array/71341/8 "2020-12-17T10:52:28Z")

</div>

Noch eine Anmerkung:

Was mir auch gerade aufgefallen ist (ich hatte noch was geändert):

```
(new ManyToOneAssociationField('productManufacturer', 'product_manufacturer_id', ProductManufacturerDefinition::class))->addFlags(new Required()),

```

Er mag es anscheinend nicht, wenn man dem ManyToOneAssociationField das Flag “new Required()” mitgibt. Möglicherweise war das die eigentliche Ursache, da das Backend dann womöglich ein Feld ‘productManufacturer’ im POST-Request&nbsp;erwartet, während das eigentlich nötige Feld ja&nbsp; ‘productManufacturerId’ ist.

---

<div class="post-metadata">

**Author:** ![etoile](https://avatars.discourse-cdn.com/v4/letter/e/9de0a6/32.png) [@etoile](https://forum.shopware.com/u/etoile)\
**Post date:** [17. Dezember 2020 um 12:42 UTC](https://forum.shopware.com/t/plugin-beim-erstellen-einer-entity-kommt-expected-data-to-be-array/71341/9 "2020-12-17T12:42:55Z")

</div>

Stimmt, das macht auch noch einen Unterschied. Wenn die Required-Flag auf dem ManyToOne-field gesetzt ist, funktionieren (Creation-)Requests mit FkKey nicht mehr; wenn man stattdessen&nbsp;ein Objekt übergibt, geht es noch. Scheint aber generell keine gute Idee zu sein.

Ich erlaube mir mal, hier auch meinen [beantworteten Thread](https://forum.shopware.com/discussion/comment/286368/#Comment_286368) zu verlinken, da die dortigen Überlegungen in diesem Kontext ebenfalls interessant sein dürften.

---

<div class="post-metadata">

**Author:** ![Michael86](https://avatars.discourse-cdn.com/v4/letter/m/ee59a6/32.png) [@Michael86](https://forum.shopware.com/u/Michael86)\
**Post date:** [17. Dezember 2020 um 12:51 UTC](https://forum.shopware.com/t/plugin-beim-erstellen-einer-entity-kommt-expected-data-to-be-array/71341/10 "2020-12-17T12:51:25Z")

</div>

Gut, danke, dass du deinen Thread auch verlinkt hast. Diese feinen Unterschiede können jemandem wie mir, der zum ersten Mal ein solches Plugin schreibt, wirklich den Nerv rauben, gerade auch, weil die zugehörige Fehlermeldung keinen Hinweis auf die Ursache gibt.

---

<div class="post-metadata">

**Author:** ![etoile](https://avatars.discourse-cdn.com/v4/letter/e/9de0a6/32.png) [@etoile](https://forum.shopware.com/u/etoile)\
**Post date:** [17. Dezember 2020 um 12:57 UTC](https://forum.shopware.com/t/plugin-beim-erstellen-einer-entity-kommt-expected-data-to-be-array/71341/11 "2020-12-17T12:57:36Z")

</div>

Ja, hier genauso, da ging viel Zeit für drauf, um das zu durchschauen. Dir auch danke fürs Posten deiner Lösungen.
