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