Tabelle con chiave primaria non a incremento automatico


9

Ho impostato una tabella in Magento che ha due campi, id e data. La data è semplicemente impostata su adesso ma l'id è in realtà una chiave esterna collegata all'id ordine.

Il mio problema è che Magento non salva questi oggetti, non si verificano errori ma non viene aggiunto nulla al database.

Risposte:


17

Il problema qui fa parte della funzione di salvataggio delle risorse che magento verifica se la chiave primaria è impostata su autoincremento e quindi la rimuove dai dati salvati in questo caso.

In Mage_Core_Model_Resource_Db_Abstract::savepuoi vedere come tratta$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));
    }
}

Quindi, per risolvere il mio problema, devo semplicemente impostare $_isPkAutoIncrementla risorsa del mio modello su false e Magento manterrà il PK nei dati e lo salverà nella tabella.


10/10 voterebbe di nuovo.
entro il

@benmarks mi stupisce ancora che inciampo in questo genere di cose
David Manners

che bella risposta e domanda + 1 voto per domande e risposte
Amit Bera
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.