Vấn đề ở đây là một phần của chức năng lưu tài nguyên magento kiểm tra nếu khóa chính được đặt thành tự động tăng và sau đó xóa nó khỏi dữ liệu đang được lưu nếu đây là trường hợp.
Trong Mage_Core_Model_Resource_Db_Abstract::save
bạn có thể thấy cách nó đối phó với$this->_isPkAutoIncrement
/**
* Not auto increment primary key support
*/
if ($this->_isPkAutoIncrement) {
$data = $this->_prepareDataForSave($object);
unset($data[$this->getIdFieldName()]);
$this->_getWriteAdapter()->update($this->getMainTable(), $data, $condition);
} else {
$select = $this->_getWriteAdapter()->select()
->from($this->getMainTable(), array($this->getIdFieldName()))
->where($condition);
if ($this->_getWriteAdapter()->fetchOne($select) !== false) {
$data = $this->_prepareDataForSave($object);
unset($data[$this->getIdFieldName()]);
if (!empty($data)) {
$this->_getWriteAdapter()->update($this->getMainTable(), $data, $condition);
}
} else {
$this->_getWriteAdapter()->insert($this->getMainTable(), $this->_prepareDataForSave($object));
}
}
Vì vậy, để khắc phục sự cố của tôi, tôi chỉ cần đặt $_isPkAutoIncrement
tài nguyên của Mô hình thành sai và Magento sẽ giữ PK trong dữ liệu và lưu nó vào bảng.