2016-12-26 8 views
0

Я разрабатываю расширение для карусели для opencart, у которого есть Item ID, Item Name, Link, Image, Sort Order. У карусели была проблема при сохранении, она изменит идентификатор элемента, поэтому мне пришлось изменить код, чтобы получить фиксированный ID, запрошенный в БД, однако теперь я получаю ошибку 1062.Opencart: Error No: 1062 Duplicate entry '1' для ключа 'PRIMARY'

Notice: Error: Duplicate entry '1' for key 'PRIMARY' Error No: 1062 INSERT INTO crousal SET crousal_id = '1', name = 'Baby & Toys', link = '/index.php?route=product/product&product_id=7570', image = 'data/carousel/banner2.jpg', sort_order = '0' in /home/user/public_html/system/database/mysql.php on line 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

Отредактировано: Информация DB Структура & Модуль

$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

Похоже, модуль не ясен. Просьба предоставить дополнительную информацию о структуре блока и базы данных DB –

+0

Я отредактировал вопрос и добавил дополнительную информацию о модуле и структуре базы данных –

ответ

1

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

+0

Если бы я понял, что вы сказали, вы имеете в виду создание баз данных и связь между ними при этом мы добавляем классификацию запроса карусели. Хотелось бы упомянуть, что я скопировал по умолчанию вариант Opencart Banner и сделал свою модификацию, и Carousel - это один список, а не многостраничный, поскольку он поставляется с Opencart> Banners –

+0

ya, точно. Но эй. Почему бы вам не использовать по умолчанию модуль Carousel вместо баннера? –

+0

Поскольку я создаю API для мобильного приложения, он будет использовать собственный БД и рабочий процесс –