Was ist der Unterschied zwischen $ model-> getOrigData (); und $ model-> getData ();?

8

Es gibt zwei Methoden, mit denen Modelldaten abgerufen werden.

$model->getData();
$model->getOrigData();

Kann jemand erklären, was der Unterschied zwischen ihnen ist? Jede Hilfe wird geschätzt.

Sukeshini
quelle
2
Egal, das habe ich nicht so gemeint. Deshalb möchte ich nur verwirrende Bereiche in Magento klären. Weil ich diese E-Commerce-Plattform kürzlich verschoben habe.
Sukeshini

Antworten:

10

getOrigData() Gibt die Daten im Objekt zum Zeitpunkt der Initialisierung / Auffüllung zurück.

Nachdem das Modell initialisiert wurde, können Sie diese Daten aktualisieren und geben getData()das zurück, was Sie aktuell in diesem Objekt haben.

Schauen Sie sich Varien_Object( getOrigData, setOrigData) an, grep -R "origData" app/damit Sie sehen können, was verwendet wird.

In EE ist es sehr nützlich, das geänderte Modul ( Enterprise_Logging ) zu protokollieren .

FlorinelChis
quelle
Vielen Dank. Ich habe auch eine Ressource gefunden. alanstorm.com/magento_models_orm
Sukeshini
15

Dies lässt sich am einfachsten anhand eines Beispiels erklären:

$product = Mage::getModel('catalog/product')->load(123);
$product->getData('something'); // returns "foo"
$product->setData('something', 'bar');
$product->getData('something');     // returns "bar"
$product->getOrigData('something'); // returns "foo"

Kurz gesagt, jedes Modell (einmal geladen) erstellt eine Kopie der ursprünglich geladenen Daten und speichert sie in der Model_Class::_origDataEigenschaft. Auf diese Weise können Optimierungen für _beforeSaveAufrufe vorgenommen werden, sodass Abfragen nur die geänderten Daten ändern und nicht immer dieselben Daten neu schreiben.

Außerdem wird jedes Mal, wenn Sie setData()ein Flag aufrufen, gesetzt, dass das Modell Daten geändert hat. Sie können überprüfen, ob ein Modell Daten geändert hat, indem Sie aufrufen $model->hasDataChanges().

adioe3
quelle