비 자동 증가 기본 키가있는 테이블


9

Magento에서 id와 date라는 두 개의 필드가있는 테이블을 설정했습니다. 날짜는 단순히 현재로 설정되었지만 ID는 실제로 주문 ID에 첨부 된 외래 키입니다.

내 문제는 Magento가 이러한 객체를 저장하지 않고 오류가 발생하지 않지만 데이터베이스에 아무것도 추가되지 않는다는 것입니다.

답변:


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

@benmarks 이런 종류의 것들을 우연히 발견하는 것은 여전히 ​​놀랍습니다
David Manners

Q & A를위한 좋은 답변과 질문 +1 투표
Amit Bera
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.