В чем разница между $ model-> getOrigData (); и $ model-> getData () ;?

8

Есть два метода, которые получают данные модели.

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

Кто-нибудь может объяснить, в чем разница между ними? Любая помощь будет оценена.

Sukeshini
источник
2
Неважно, я не это имел в виду. так что я просто хочу прояснить непонятные области в magento. Потому что я недавно переместил эту платформу электронной коммерции.
Sukeshini

Ответы:

10

getOrigData() возвращает данные в объекте во время его инициализации / заполнения.

После инициализации модели вы можете обновить эти данные и getData()вернуть то, что у вас есть в данный момент в этом объекте.

Посмотрите на Varien_Object( getOrigData, setOrigData), grep -R "origData" app/чтобы вы могли взглянуть на то, что используется.

В EE очень полезно регистрировать модуль изменения ( Enterprise_Logging ).

FlorinelChis
источник
Большое спасибо. Я также нашел ресурс. alanstorm.com/magento_models_orm
Sukeshini
15

Это проще всего объяснить на примере:

$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"

В двух словах, каждая модель (после загрузки) сделает копию первоначально загруженных данных и сохранит ее в Model_Class::_origDataсвойстве. Это позволяет оптимизировать _beforeSaveвызовы, чтобы запросы только изменяли измененные данные и не перезаписывали одни и те же данные все время.

Кроме того, каждый раз, когда вы вызываете setData()флаг, устанавливается, что модель изменила данные. Вы можете проверить, изменила ли модель данные, позвонив $model->hasDataChanges().

adioe3
источник