Ich möchte den Wert eines Attributs speichern können, ohne seine übergeordnete Entität zu speichern. Ich habe ein neues Kundenattribut über die sql / setup-Datei meines Moduls erstellt ( ref ), und jetzt möchte ich dieses Attribut für jeden vorhandenen Kunden auffüllen. Ich habe ein Backend-Modell für das Attribut erstellt, das Nullwerte während des Ladens der Entität (afterLoad) erkennt und den Inhalt generiert, aber ich zögere, die Entität zu diesem Zeitpunkt im Prozess zu speichern.
%Vor% Im Idealfall möchte ich in der Methode $this->getAttribute()->setValue('blah')->save()
etwas wie afterLoad
aufrufen, damit es nicht darauf angewiesen ist, dass der Benutzer auf Speichern klickt.
Ich könnte ein Skript schreiben, das eine Sammlung aller Kunden lädt und sie durchgehen lässt, um den Wert festzulegen, aber es gibt über 50.000 Kunden und ich bin besorgt über die Auswirkungen auf die Leistung auf einem Produktionsserver ...
> Irgendwelche Gedanken geschätzt.
JD
Also eine Option, die es direkt in die Datenbank schreibt. Dies ist nicht besonders elegant, aber ziemlich effektiv beim Erreichen des "Lazy-Load" -Ansatzes zum Auffüllen eines neuen Attributs für bestehende Kunden (oder andere Entitäten). Hier ist der zusätzliche Code im Attribut_Backend_Referralcode zu dem, was ich in der Frage gepostet habe:
%Vor%Es muss eine öffentliche Methode verfügbar gemacht werden, um den Write Adapter auf das Mysql4-Modell zu bekommen, aber keine große Sache.
Immer noch interessiert zu wissen, ob es einen Ansatz gibt, der die EAV-Modellschicht besser nutzt ...
Die von Vinai angebotene Lösung funktioniert nicht für Attribute mit dem statischen Typ des Backend-Typs. Im Falle von statischen können Sie nur so etwas tun:
%Vor%Tags und Links attributes php magento entity-attribute-value