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.


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 .


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().

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.