自動インクリメント以外の主キーを持つテーブル


9

Magentoで、idとdateの2つのフィールドを持つテーブルをセットアップしました。日付は単に現在に設定されていますが、IDは実際には注文IDに添付された外部キーです。

私の問題は、Magentoがこれらのオブジェクトを保存しないことです。エラーは発生しませんが、データベースには何も追加されません。

回答:


16

ここでの問題は、リソース保存関数の一部です。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は再び賛成票を投じます。
ベンマークス2015年

@benmarks私がこの種の武器につまずくのを今でも驚かせます
David Manners

Q&Aへの良い回答と質問+ 1vote
Amit Bera
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.