Opencart: Ошибка №: 1062 Повторяющаяся запись «1» для ключа «PRIMARY»

Я разрабатываю расширение для карусели для opencart, которое имеет идентификатор элемента, имя элемента, ссылку, изображение, порядок сортировки. У карусели возникла проблема, при сохранении она изменит идентификатор элемента, поэтому мне пришлось изменить код, чтобы запросить фиксированный идентификатор в БД, однако теперь я получаю сообщение об ошибке 1062.

Примечание: Ошибка: Дублирующая запись «1» для ключа «ОСНОВНОЙ» Ошибка №: 1062
INSERT INTO crousal SET crousal_id = ‘1’, name = ‘Baby & Игрушки, ссылка =
«/index.php?route=product/product&product_id = 7570 ‘, изображение =
‘data / carousel / banner2.jpg’, sort_order = ‘0’ в
/home/user/public_html/system/database/mysql.php в строке 49

Совместное использование модели / carousel.php editCarousel Функция

public function editCrousal($crousal_image) {

$crousal_id = $this->db->getLastId();

$this->db->query("DELETE FROM " . DB_PREFIX . "mobiapp_crousal WHERE crousal_id = '" . (int)$crousal_id . "'");

if (isset($crousal_image['crousal_image'])) {
foreach ($crousal_image['crousal_image'] as $crousal_image) {

$this->db->query("INSERT INTO " . DB_PREFIX . "mobiapp_crousal SET  crousal_id = '" . (int)$crousal_id . "', name = '" .  $this->db->escape($crousal_image['name']) . "', link = '" .  $this->db->escape($crousal_image['link']) . "', image = '" .  $this->db->escape($crousal_image['image']) . "', sort_order = '" . (int)$crousal_image['sort_order'] . "'");

$crousal_id = $this->db->getLastId();

}
}
}

Любой совет, почему я получаю эту ошибку и как ее устранить, спасибо заранее.

P.S .: Opencart 1.5.x

Отредактировано: структура БД & Информация о модуле

    $this->db->query("CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "mobiapp_crousal` (
`crousal_id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`link` VARCHAR(255) NOT NULL,
`image` VARCHAR(255) NOT NULL,
`sort_order` INT(3) NOT NULL,
PRIMARY KEY (`crousal_id`)
) ENGINE=MyISAM DEFAULT COLLATE=utf8_general_ci;");

Файл модели

public function addCrousal($crousal_image) {
$this->db->query("INSERT INTO " . DB_PREFIX . "mobiapp_crousal SET name = '" . $this->db->escape($crousal_image['name']) . "', sort_order = '" . (int)$crousal_image['sort_order'] . "'");

$crousal_id = $this->db->getLastId();

if (isset($crousal_image['crousal_image'])) {
foreach ($crousal_image['crousal_image'] as $crousal_image) {
$this->db->query("INSERT INTO " . DB_PREFIX . "mobiapp_crousal SET  crousal_id = '" . (int)$crousal_id . "', link = '" .  $this->db->escape($crousal_image['link']) . "', image = '" .  $this->db->escape($crousal_image['image']) . "'");

$crousal_id = $this->db->getLastId();
}
}
}

public function editCrousal($crousal_image) {

$crousal_id = $this->db->getLastId();

$this->db->query("DELETE FROM " . DB_PREFIX . "mobiapp_crousal WHERE crousal_id = '" . (int)$crousal_id . "'");

if (isset($crousal_image['crousal_image'])) {
foreach ($crousal_image['crousal_image'] as $crousal_image) {

$this->db->query("INSERT INTO " . DB_PREFIX . "mobiapp_crousal SET  crousal_id = '" . (int)$crousal_id . "', name = '" .  $this->db->escape($crousal_image['name']) . "', link = '" .  $this->db->escape($crousal_image['link']) . "', image = '" .  $this->db->escape($crousal_image['image']) . "', sort_order = '" . (int)$crousal_image['sort_order'] . "'");

$crousal_id = $this->db->getLastId();

}
}
}

public function getCrousalImages() {
$crousal_image_data = array();

$crousal_image_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "mobiapp_crousal ORDER BY sort_order ASC");

foreach ($crousal_image_query->rows as $crousal_image) {
$crousal_image_description_data = array();

$crousal_image_description_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "mobiapp_crousal WHERE crousal_id = '" . (int)$crousal_image['crousal_id'] . "'");

$crousal_image_data[] = array(
'crousal_image'            => $crousal_image,
'link'                     => $crousal_image['link'],
'name'                     => $crousal_image['name'],
'crousal_id'               => $crousal_image['crousal_id'],
'image'                    => $crousal_image['image'],
'sort_order'               => $crousal_image['sort_order']
);
}

return $crousal_image_data;
}

0

Решение

Я сделал обзор для этого модуля. Похоже, этот модуль имеет совершенно неправильную структуру. Как вы можете видеть в методе addCrousal foreach-оператор с вставкой в ​​базу данных. Но в этой вставке carousal_id не увеличивается, поэтому в таблице будут записи с не уникальными carousal_id, Так что этот столбец не может быть первичным.
Предлагаю переписать модуль с двумя таблицами «Слайды» с отношениями (имеет много) «Изображения». Или вы можете удалить ПЕРВИЧНЫЙ индекс, и операция пройдет, но это не верное решение.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector