Tabelas com chave primária de incremento não automático

9

Eu configurei uma tabela no Magento que possui dois campos, id e data. A data é simplesmente definida como agora, mas o ID é na verdade uma chave estrangeira anexada ao ID do pedido.

Meu problema é que o Magento não salva esses objetos, nenhum erro ocorre, mas nada é adicionado ao banco de dados.

David Manners
fonte

Respostas:

16

O problema aqui faz parte da função de economia de recursos. O magento verifica se a chave primária está configurada para incremento automático e, em seguida, a remove dos dados que estão sendo salvos, se este for o caso.

Em Mage_Core_Model_Resource_Db_Abstract::savevocê pode ver como ele lida com$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));
    }
}

Portanto, para corrigir meu problema, simplesmente tenho que definir $_isPkAutoIncremento recurso do meu modelo como false e o Magento manterá o PK nos dados e o salvará na tabela.

David Manners
fonte
10/10 votaria novamente.
benmarks
@benmarks ele ainda me espanta que eu tropeçar apon este tipo de coisas
David Manners
que boa resposta e pergunta + 1 em votação para Perguntas e Respostas
Amit Bera