Tablas con clave primaria de incremento no automático

9

He configurado una tabla en Magento que tiene dos campos, id y fecha. La fecha es simplemente la establecida en ahora, pero la identificación es en realidad una clave externa adjunta a la identificación del pedido.

Mi problema es que Magento no guarda estos objetos, no ocurren errores pero no se agrega nada a la base de datos.

David modales
fuente

Respuestas:

16

El problema aquí es parte de la función de guardar recursos.

En Mage_Core_Model_Resource_Db_Abstract::savepuedes ver cómo se trata$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));
    }
}

Entonces, para solucionar mi problema, simplemente tengo que establecer $_isPkAutoIncrementel recurso de mi Modelo en falso y Magento mantendrá el PK en los datos y lo guardará en la tabla.

David modales
fuente
10/10 volvería a votar de nuevo.
puntos de referencia
@benmarks todavía me sorprende que tropiece con este tipo de cosas
David Manners
qué buena respuesta y pregunta + 1voto para preguntas y respuestas
Amit Bera