Таблиці з первинним ключем без автоматичного збільшення


9

Я створив таблицю в Magento, яка містить два поля, 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 буде зберігати ПК у даних та зберігати їх у таблиці.


10/10 знову повторить.
орієнтири

@benmarks все ще мене дивує, що я натрапляю на апон такі речі
Девід Маннерс

яка гарна відповідь і запитання + 1 голос за запитання та відповіді
Аміт Бера
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.