Tabellen mit nicht automatisch inkrementiertem Primärschlüssel

9

Ich habe eine Tabelle in Magento eingerichtet, die zwei Felder enthält, ID und Datum. Das Datum ist einfach auf jetzt eingestellt, aber die ID ist tatsächlich ein Fremdschlüssel, der an die Bestell-ID angehängt ist.

Mein Problem ist, dass Magento diese Objekte nicht speichert, keine Fehler auftreten, aber der Datenbank nichts hinzugefügt wird.

David Manners
quelle

Antworten:

15

Das Problem hierbei ist Teil der Funktion zum Speichern von Ressourcen. Magento prüft, ob der Primärschlüssel auf automatische Inkrementierung eingestellt ist, und entfernt ihn dann aus den gespeicherten Daten, wenn dies der Fall ist.

In können Mage_Core_Model_Resource_Db_Abstract::saveSie sehen, wie es damit umgeht$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));
    }
}

Um mein Problem zu beheben, muss ich einfach $_isPkAutoIncrementdie Ressource meines Modells auf false setzen, und Magento behält die PK in den Daten und speichert sie in der Tabelle.

David Manners
quelle
10/10 würde wieder upvoten.
Benmarks
@benmarks es wundert mich immer noch, dass ich über solche Dinge stolpere
David Manners
Was für eine gute Antwort und Frage + 1 Stimme für Fragen und Antworten
Amit Bera