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.

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.