Есть два метода, которые получают данные модели.
$model->getData();
$model->getOrigData();
Кто-нибудь может объяснить, в чем разница между ними? Любая помощь будет оценена.
Есть два метода, которые получают данные модели.
$model->getData();
$model->getOrigData();
Кто-нибудь может объяснить, в чем разница между ними? Любая помощь будет оценена.
Ответы:
getOrigData()
возвращает данные в объекте во время его инициализации / заполнения.
После инициализации модели вы можете обновить эти данные и getData()
вернуть то, что у вас есть в данный момент в этом объекте.
Посмотрите на Varien_Object
( getOrigData
, setOrigData
), grep -R "origData" app/
чтобы вы могли взглянуть на то, что используется.
В EE очень полезно регистрировать модуль изменения ( Enterprise_Logging ).
Это проще всего объяснить на примере:
$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()
.