Tables avec clé primaire à incrémentation non automatique


9

J'ai mis en place une table dans Magento qui a deux champs, id et date. La date est simplement définie à maintenant, mais l'id est en fait une clé étrangère attachée à l'id de la commande.

Mon problème est que Magento n'enregistre pas ces objets, aucune erreur ne se produit mais rien n'est ajouté à la base de données.

Réponses:


16

Le problème ici fait partie de la fonction de sauvegarde des ressources magento vérifie si la clé primaire est définie sur incrémentation automatique, puis la supprime des données en cours de sauvegarde si c'est le cas.

En Mage_Core_Model_Resource_Db_Abstract::savevous pouvez voir comment il traite$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));
    }
}

Donc, pour résoudre mon problème, je dois simplement définir $_isPkAutoIncrementla ressource de mon modèle sur false et Magento conservera le PK dans les données et l'enregistrera dans le tableau.


10/10 voterait à nouveau.
benmarks

@benmarks, il m'étonne toujours que je tombe sur ce genre de choses
David Manners

quelle bonne réponse et question + 1 vote pour Q & A
Amit Bera
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.