Tabele z kluczem podstawowym nieautomatycznym

9

W Magento utworzyłem tabelę, która ma dwa pola, identyfikator i datę. Data jest po prostu ustawiona na teraz, ale identyfikator jest tak naprawdę kluczem obcym dołączonym do identyfikatora zamówienia.

Mój problem polega na tym, że Magento nie zapisuje tych obiektów, nie występują błędy, ale nic nie jest dodawane do bazy danych.

David Manners
źródło

Odpowiedzi:

17

Problem jest tutaj częścią funkcji oszczędzania zasobów. Magento sprawdza, czy klucz podstawowy jest ustawiony na automatyczny przyrost, a następnie usuwa go z zapisywanych danych.

W Mage_Core_Model_Resource_Db_Abstract::savemożna zobaczyć, jak to dotyczy$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));
    }
}

Aby rozwiązać mój problem, po prostu muszę ustawić $_isPkAutoIncrementw zasobach mojego Modelu wartość false, a Magento zachowa PK w danych i zapisze je w tabeli.

David Manners
źródło
10/10 zagłosuje ponownie.
zyskuje
@benmarks nadal mnie zadziwia, że ​​potykam się o takie rzeczy
David Manners
co za dobra odpowiedź i pytanie + 1 głos na pytania i odpowiedzi
Amit Bera