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.

David Manners
la source

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.

David Manners
la source
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