ตารางที่ไม่มีคีย์หลักที่เพิ่มขึ้นอัตโนมัติ


9

ฉันได้ตั้งค่าตารางใน Magento ที่มีสองฟิลด์รหัสและวันที่ วันที่เป็นเพียงการตั้งค่าเป็นตอนนี้ แต่รหัสเป็นจริงเป็นกุญแจต่างประเทศที่แนบมากับรหัสการสั่งซื้อ

ปัญหาของฉันคือ Magento ไม่ได้บันทึกวัตถุเหล่านี้ไม่มีข้อผิดพลาดเกิดขึ้น แต่ไม่มีการเพิ่มอะไรลงในฐานข้อมูล

คำตอบ:


17

ปัญหาที่นี่เป็นส่วนหนึ่งของฟังก์ชั่นการบันทึกทรัพยากรวีโอไอพีจะตรวจสอบว่าคีย์หลักถูกตั้งค่าเป็นเพิ่มอัตโนมัติหรือไม่จากนั้นลบออกจากข้อมูลที่บันทึกไว้หากเป็นกรณีนี้

ในMage_Core_Model_Resource_Db_Abstract::saveคุณสามารถดูว่ามันเกี่ยวข้องกับ$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));
    }
}

ดังนั้นเพื่อแก้ไขปัญหาของฉันฉันเพียงแค่ต้องตั้งค่า$_isPkAutoIncrementในโมเดลของฉันเป็นเท็จและ Magento จะเก็บ PK ไว้ในข้อมูลและบันทึกลงในตาราง


10/10 จะโหวตขึ้นอีกครั้ง
benmarks

@ เครื่องหมายมันยังทำให้ฉันประหลาดใจที่ฉันสะดุด apon สิ่งต่าง ๆ เหล่านี้
David Manners

เป็นคำตอบที่ดีและมีคำถามอะไร 1 คะแนนสำหรับคำถาม & คำตอบ
Amit Bera
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.