2016-12-26 8 views
0

アイテムID、アイテム名、リンク、イメージ、並べ替え順序を持つopencartのカルーセル拡張を開発しています。カルーセルには問題がありましたが、保存するとアイテムIDが変更されるため、IDを取得するためにコードを修正する必要がありましたが、今は1062エラーが発生します。モデル/ carousel.php editCarousel機能Opencart:エラー番号:1062キー 'PRIMARY'の重複エントリ '1'

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(); 

     } 
    } 
} 

私はこのエラーを取得し、どのように解決するのよ、なぜ何かアドバイスを共有

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

は、高度でお願いします。

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

私は質問を編集し、モジュールとDB構造の詳細を追加しました –

答えて

1

私は、このモジュールの見直しを行いました。このモジュールのような構造が完全に間違っているようです。あなたが見ることができるように、addCrousalデータベースへの挿入を伴うforeach文。しかし、このインサートでは、carousal_idはテーブル内で増分していないので、一意でないレコードはcarousal_idとなります。この列はPRIMARYにすることはできません。 2つのテーブル「スライド」とリレーション(たくさんある)「イメージ」を使ってモジュールを書き直すことをお勧めします。または、PRIMARYインデックスを削除できますが、操作は成功しますが、それは真の解決策ではありません。

+0

あなたが言ったことを理解すれば、データベースを作成し、カルーセル項目のクエリを分類して追加します。 Opencart> Banners –

+0

と同じように、既定のOpencart Banner modをコピーして修正を加え、カルーセルが1つのリストで、マルチリストではないことを言及したいと思います。しかしねえ。なぜ、バナーの代わりにデフォルトのモジュールカルーセルを使用しないのですか? –

+0

私はモバイルアプリ用のAPIを作成しているので、独自のDBとワークフローを使用します。 –

関連する問題