Apa perbedaan antara $ model-> getOrigData (); dan $ model-> getData () ;?

8

Ada dua metode yang mengambil data model.

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

Adakah yang bisa menjelaskan apa perbedaan di antara mereka? Bantuan apa pun akan dihargai.

Sukeshini
sumber
2
Bagaimanapun, aku tidak bermaksud seperti itu. jadi saya hanya ingin menjelaskan daerah yang membingungkan di Magento. Karena saya baru saja memindahkan platform e-commerce ini.
Sukeshini

Jawaban:

10

getOrigData() mengembalikan data dalam objek pada saat itu diinisialisasi / dihuni.

Setelah model diinisialisasi Anda dapat memperbarui data itu dan getData()akan mengembalikan apa yang saat ini Anda miliki di objek itu.

Lihatlah Varien_Object( getOrigData, setOrigData), grep -R "origData" app/sehingga Anda dapat melihat apa yang digunakan.

Di EE, sangat berguna untuk mencatat apa yang diubah ( Enterprise_Logging ) modul.

FlorinelChis
sumber
Terima kasih banyak. Saya juga menemukan sumber daya. alanstorm.com/magento_models_orm
Sukeshini
15

Ini paling mudah dijelaskan dengan sebuah contoh:

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

Singkatnya, setiap model (setelah dimuat) akan membuat salinan dari data yang dimuat sebelumnya dan menyimpannya di Model_Class::_origDataproperti. Hal ini memungkinkan dilakukannya optimasi untuk _beforeSavepanggilan sehingga permintaan hanya mengubah data yang diubah dan tidak menulis ulang data yang sama sepanjang waktu.

Juga, setiap kali Anda memanggil setData()bendera ditetapkan bahwa model telah mengubah data. Anda dapat memeriksa apakah model telah mengubah data dengan menelepon $model->hasDataChanges().

adioe3
sumber