Sự khác biệt giữa $ model-> getOrigData (); và $ model-> getData ();?


8

Có hai phương pháp lấy dữ liệu mô hình.

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

Bất cứ ai có thể giải thích sự khác biệt giữa chúng là gì? Bất kỳ trợ giúp sẽ được đánh giá cao.


2
Nevermind, tôi không có ý đó. Vì vậy, tôi chỉ muốn làm rõ các khu vực khó hiểu trong magento. Bởi vì tôi đã chuyển nền tảng thương mại điện tử này gần đây.
Sukeshini

Câu trả lời:


10

getOrigData() trả về dữ liệu trong đối tượng tại thời điểm nó được khởi tạo / điền.

Sau khi mô hình được khởi tạo, bạn có thể cập nhật dữ liệu đó và getData()sẽ trả về những gì bạn hiện có trong đối tượng đó.

Hãy nhìn vào Varien_Object( getOrigData, setOrigData), grep -R "origData" app/để bạn có thể xem những gì được sử dụng.

Trong EE, rất hữu ích để ghi lại mô-đun đã thay đổi ( Enterprise_Logging ).


Cảm ơn rất nhiều. Tôi cũng tìm thấy một tài nguyên. alanstorm.com/magento_models_orm
Sukeshini

15

Điều này được giải thích dễ dàng nhất bằng một ví dụ:

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

Tóm lại, mọi mô hình (một khi được tải) sẽ tạo một bản sao của dữ liệu được tải ban đầu và lưu trữ nó trong thuộc Model_Class::_origDatatính. Điều này cho phép thực hiện tối ưu hóa các _beforeSavecuộc gọi để các truy vấn chỉ sửa đổi dữ liệu đã thay đổi và không phải viết lại cùng một dữ liệu mọi lúc.

Ngoài ra, bất cứ khi nào bạn gọi setData()một cờ được đặt là mô hình đã thay đổi dữ liệu. Bạn có thể kiểm tra xem một mô hình đã thay đổi dữ liệu bằng cách gọi $model->hasDataChanges().

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.