Ich entwickle ein benutzerdefiniertes Magento-Modul, das eine Liste von E-Mail-Adressen in einer benutzerdefinierten Tabelle speichern muss. Der entsprechende Code sieht so aus:
%Vor% Die Methode getNewSubscriptionsForAPI()
gibt gültige Daten zurück, und $requestModel
ist ein gültiges Magento-Modell.
Wenn diese Schleife ausgeführt wird, überschreibt der Datenbankadapter jedoch einfach jeden Datensatz über dem vorherigen. Dh, wenn ich in phpMyAdmin wiederholt auf 'browse' klicke, kann ich verschiedene E-Mail-Adressen sehen, die in die Datenbank geschrieben werden, aber immer in derselben Zeile, wobei der vorherige Eintrag überschrieben wird. Das ID-Feld ist korrekt eingerichtet: als Primärschlüssel auf AUTO_INCREMENT gesetzt und als ID-Feld im Ressourcenmodell gekennzeichnet.
Interessant ist, dass ich die obige Schleife verwenden kann, um aufeinanderfolgende Datensätze in der Tabelle newsletter/subscriber
des Kerns ohne Probleme zu schreiben.
Ich könnte natürlich einfach unset()
das Modell und es wieder aus der Mage::getModel()
bei jedem Zyklus der Schleife, aber das (a) scheint sehr verschwenderisch, und (b) verdirbt meine Dependency Injection-Setup zum Testen (wobei ich nicht möchte, dass der Code seine eigenen Modelle instanziiert, sondern die verwendet, die ich an ihn weitergebe).
Kann mir jemand in die richtige Richtung zeigen?
Wenn Magento ein neues Objekt speichert, generiert es automatisch eine ID für das Objekt. Nachdem Sie das Objekt gespeichert haben, wird eine ID generiert. Damit Magento Ihre Daten wieder als neues Modell erkennt, müssen Sie lediglich das Modell id
aufheben. Ich denke jedoch, unsetData
ist eleganter, da es auch alle Daten löscht, die möglicherweise für das vorherige Objekt erstellt wurden: -).
Ah, es scheint, als hätte ich meine eigene Frage beantwortet. Wenn Sie einen Aufruf von $requestModel->unsetData();
direkt nach dem Aufruf von $requestModel->save()
einfügen, funktioniert die Schleife wie vorgesehen.
unsetData
ist eine Methode, die von Varien_Object zur Verfügung gestellt wird, von der Mage_Core_Model_Abstract erbt.
Ich freue mich, dass jemand eine elegantere Lösung beisteuert. Ich freue mich, das zu hören.
Ich weiß nicht, ob das eleganter ist oder nicht, aber es ist dir gelungen, dein Problem mit diesem Code zu lösen. Bei jeder Schleife wird eine neue Zeile mit den neuen Informationen hinzugefügt.
%Vor%Wenn Sie "E-Mail", "Aktion" und "Gebucht" berücksichtigen, sind dies die Feldnamen Ihrer Datenbanktabelle.