Attribut standardmäßig NULL anstatt 0

Hallo,

ich habe per Plugin ein Attribut in s_user_attributes erstellt. Datentyp ist INT, per default soll der Wert 0 sein. Das funktioniert auch soweit wenn das Plugin installiert wird, für alle Kunden die sich danach registrieren ist die Spalte allerdings NULL anstatt 0. NULL sollte auch erlaubt sein, aber halt nicht als Standard.

public function install(InstallContext $context)
{
    // ...
    $attributeCrudService = $container->get('shopware_attribute.crud_service');

    $attributeCrudService->update(
        's_user_attributes', // table
        'my_attribute', // column name
        TypeMapping::TYPE_INTEGER, // type
        [], // data
        null, // new column name
        true, // update depending tables
        0 // default value
    );
    // ...
}

Das Datenbankschema sieht korrekt aus. Wenn ich einen Datensatz manuell per SQL anlege ohne das Atrribut anzugeben wird auch der korrekte Wert gesetzt.

DESC s_user_attributes;

+-----------------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| userID | int(11) | YES | UNI | NULL | |
| my_attribute | int(11) | YES | | 0 | |
+-----------------------+---------+------+-----+---------+----------------+

Was mache ich falsch?

Du machst nix falsch. Ich glaube Shopware nulled alle nicht gesetzten werde irgendwo.

1 Like

@arnebecker schrieb:

Du machst nix falsch. Ich glaube Shopware nulled alle nicht gesetzten werde irgendwo.

Sehe ich auch so, mein spontaner vorschlag wäre: bei der registrierung über ein passendes Event das Attribut setzen.

1 Like

Okay, vielen Dank für die Info. Ich bin davon ausgegangen weil es a) in der s_attribute_configuration eine Spalte „default_value“ gibt deren Sinn ich dann jetzt nicht mehr erkenne und b) irgendwie logisch ist.

Ich setze den Initialwert jetzt selber wie von @wabAB‍ vorgeschlagen. Klappt gut.

Ein wenig seltsam, finde ich auch…

Aber schön, dass es nun klappt :-) 

@pgaaa schrieb:

Okay, vielen Dank für die Info. Ich bin davon ausgegangen weil es a) in der s_attribute_configuration eine Spalte “default_value” gibt deren Sinn ich dann jetzt nicht mehr erkenne und b) irgendwie logisch ist.

Leider macht nicht immer alles Sinn. Shopware ist ein gewachsenes Produkt. Sowas passert. Wenn du Stelle im Code gefunden hast, mach doch gerne einen Pull Request. Andere Nutzer würden sich dann auch sehr freuen. Ich glaube wenn du den Kunden im Backend bearbeitest oder anlegst, dann würde es auch wie gewünscht greifen.

Vielleicht mal gucken in der Datei:  /var/cache/production_xxxx/doctrine/attributes/User.php

Da gibt’s eine public function __construct() die alle Attribute auf ihre Default Wert einstellt. Wahrscheinlich fehlt da dein Attribut?

Sollte was enthalten wie   $this->meinAttribut = 0;

WIrd normalerweise neu angelegt beim Cache leeren.