具有非自动增量主键的表


9

我已经在Magento中设置了一个表格,该表格具有两个字段,即id和date。日期只是现在的日期,但是id实际上是附加在订单ID上的外键。

我的问题是Magento不会保存这些对象,不会发生任何错误,但是什么也不会添加到数据库中。

Answers:


17

这里的问题是资源保存功能magento的一部分,它检查主键是否设置为自动递增,然后在这种情况下将其从要保存的数据中删除。

Mage_Core_Model_Resource_Db_Abstract::save您可以看到它如何处理$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));
    }
}

因此,要解决我的问题,我只需要将$_isPkAutoIncrement我模型的资源设置为false,Magento会将PK保留在数据中并将其保存到表中。


10/10将再次投票。
Benmarks 2015年

@benmarks让我绊倒这些事情仍然让我感到惊讶
David Manners

问答的最佳答案和问题是+1票
阿米特·贝拉
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.