Các bảng có khóa chính không tự động tăng


9

Tôi đã thiết lập một bảng trong Magento có hai trường, id và ngày. Ngày chỉ đơn giản là thiết lập cho đến bây giờ nhưng id thực sự là một khóa ngoại gắn liền với id đơn hàng.

Vấn đề của tôi là Magento không lưu các đối tượng này, không có lỗi xảy ra nhưng không có gì được thêm vào cơ sở dữ liệu.

Câu trả lời:


16

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::savebạ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 $_isPkAutoIncrementtà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.


10/10 sẽ upvote một lần nữa.
đánh dấu

@benmark vẫn làm tôi ngạc nhiên khi tôi vấp ngã những thứ này
David Manners

thật là một câu trả lời hay và câu hỏi + 1 câu hỏi cho câu hỏi và trả lời
Amit Bera
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.