Otomatik artırılmamış birincil anahtarlı tablolar


9

Magento'da id ve tarih olmak üzere iki alan içeren bir tablo ayarladım. Tarih şimdiye kadar ayarlanmış ancak kimlik aslında sipariş kimliğine eklenmiş yabancı bir anahtar.

Benim sorunum Magento bu nesneleri kaydetmez, hiçbir hata olmaz ama veritabanına hiçbir şey eklenmedi.

Yanıtlar:


17

Buradaki sorun, kaynak kaydetme fonksiyonunun bir parçasıdır. Magento, birincil anahtarın otomatik artırmaya ayarlanıp ayarlanmadığını denetler ve bu durumda, kaydedilen verilerden kaldırır.

İle Mage_Core_Model_Resource_Db_Abstract::savenasıl başa çıktığını görebilirsiniz$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));
    }
}

Bu yüzden sorunumu düzeltmek için $_isPkAutoIncrementModelimin kaynağını false olarak ayarlamam gerekiyor ve Magento PK'yi verilerde tutacak ve tabloya kaydedecek.


10/10 tekrar yükselir.
benmarks

@benmarks hala bu tür şeyleri kandırmak beni şaşırtıyor
David Manners

Q&A için ne iyi bir cevap ve soru + 1 oy
Amit Bera
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.