# DataStack::add(): Argument #1 ($key) must be of type string, int given, called in

**URL:** <https://forum.shopware.com/t/datastack-add-argument-1-key-must-be-of-type-string-int-given-called-in/105728>\
**Category:** Programmierung\
**Created:** [2. November 2024 um 19:32 UTC](https://forum.shopware.com/t/datastack-add-argument-1-key-must-be-of-type-string-int-given-called-in/105728 "2024-11-02T19:32:08Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![maximsteinhh](https://avatars.discourse-cdn.com/v4/letter/m/74df32/32.png) [@maximsteinhh](https://forum.shopware.com/u/maximsteinhh)\
**Post date:** [2. November 2024 um 19:32 UTC](https://forum.shopware.com/t/datastack-add-argument-1-key-must-be-of-type-string-int-given-called-in/105728/1 "2024-11-02T19:32:08Z")

</div>

Hallo, ich kriege es hier nach langem Versuchen irgendwie nicht hin, eine Custom Entity im Adminbereich per Javascript zu speichern.  
Ich mache es so wie in der offiziellen Dokumentation angegeben:

```auto
   var entity = this.customizableSurfaceRepository.create(Shopware.Context.api);
                entity.name = 'test';
                entity.productCustomizationSpecId= this.productCustomizationSpec.id;
                this.customizableSurfaceRepository.save(entity, Shopware.Context.api);

```

Aber erhalte immer den Fehler

„Shopware\Core\Framework\DataAbstractionLayer\Write\DataStack\DataStack::add(): Argument #1 ($key) must be of type string, int given, called in /var/www/html/vendor/shopware/core/Framework/DataAbstractionLayer/Write/WriteCommandExtractor.php on line 398“

Ich konnte aus der Fehlermeldung nicht rauslesen wo das Problem ist. Das einzige Feld was in der Entity gesetzt sein muss ist der ID-Verweis und der ist vorhanden.  
Woran kann das liegen?

---

<div class="post-metadata">

**Author:** ![Anotherone](https://avatars.discourse-cdn.com/v4/letter/a/6de8d8/32.png) [@Anotherone](https://forum.shopware.com/u/Anotherone)\
**Post date:** [3. November 2024 um 16:48 UTC](https://forum.shopware.com/t/datastack-add-argument-1-key-must-be-of-type-string-int-given-called-in/105728/2 "2024-11-03T16:48:30Z")

</div>

Was wird denn als ID übergeben? Fehlermeldung besagt, das der Wert ein String sein muss, aber eine Ganzzahl (int) übergeben wird.

---

<div class="post-metadata">

**Author:** ![maximsteinhh](https://avatars.discourse-cdn.com/v4/letter/m/74df32/32.png) [@maximsteinhh](https://forum.shopware.com/u/maximsteinhh)\
**Post date:** [3. November 2024 um 21:52 UTC](https://forum.shopware.com/t/datastack-add-argument-1-key-must-be-of-type-string-int-given-called-in/105728/3 "2024-11-03T21:52:33Z")

</div>

Da wird ganz normal die ID als String übergeben. Habe auch testweise noch eine Entity erstellt, welche nur einen Verweis auf die Parent-Entity hat. Da kommt der gleiche Fehler. Der Request sieht so aus:

```auto
{
    "id": "0192f40322ad72ba9c2d7930abde7eb7",
    "maxims": [
        {
            "id": "0192f40322ae7b888d013f7dcd0d868a"
        }
    ],
    "productId": "3ac014f329884b57a2cce5a29f34779c"
}

```

Andere Pflichtfelder hat die Entity gar nicht.

Jetzt schlägt auch das Speichern der Hauptentität mit dem gleichen Fehler fehl, obwohl nur zwei IDs beim Request übergeben werden.

```auto
{id: "0192f41346d37b19ba05818ee36a2e96", 
productId: "3ac014f329884b57a2cce5a29f34779c"}

```

Hier ist noch die EntityDefinition wo das jetzt auch Fehlschlägt.

```auto
   protected function defineFields(): FieldCollection
    {
        return new FieldCollection([
            (new IdField('id', 'id'))->addFlags(new PrimaryKey(), new Required()),
            new OneToManyAssociationField(
                'maxims',
                MaximDefinition::class,
                'product_customization_spec_id',
                'id'
            ),
            new StringField('name', 'name'),
            new StringField('description', 'description'),
            new FkField('product_id', 'productId', ProductDefinition::class),
            new ManyToOneAssociationField('product', 'product_id', ProductDefinition::class, 'id', true),
            new OneToManyAssociationField(
                'customizableSurfaces',           
                CustomizableSurfaceDefinition::class,  
`CustomizableSurface`
                'product_customization_spec_id',   
                'id'
            ),
            new CreatedAtField(),
            new UpdatedAtField()
        ]);
    }

```

---

<div class="post-metadata">

**Author:** ![Anotherone](https://avatars.discourse-cdn.com/v4/letter/a/6de8d8/32.png) [@Anotherone](https://forum.shopware.com/u/Anotherone)\
**Post date:** [5. November 2024 um 13:24 UTC](https://forum.shopware.com/t/datastack-add-argument-1-key-must-be-of-type-string-int-given-called-in/105728/4 "2024-11-05T13:24:29Z")

</div>

Sehr kurios. Hab mal die DataStack-\>add angeschaut und da ist der erste Parameter $key ein String, der zweite $value darf mixed sein, es stört in also wohl eher der $key. Ich würde ja jetzt einfach in die Funktion stumpf ein error\_log mit den Werten reinpacken, eh man sich hier einen Wolf sucht…
